MySQLi - Verwenden von Sequenzen
Eine Sequenz ist eine Menge von Ganzzahlen 1, 2, 3, ..., die bei Bedarf in der richtigen Reihenfolge generiert werden. Sequenzen werden häufig in Datenbanken verwendet, da bei vielen Anwendungen jede Zeile in einer Tabelle einen eindeutigen Wert enthalten muss und Sequenzen eine einfache Möglichkeit bieten, sie zu generieren. In diesem Kapitel wird die Verwendung von Sequenzen in MySQLi beschrieben.
Verwenden der Spalte AUTO_INCREMENT
Die einfachste Möglichkeit in MySQLi, Sequenzen zu verwenden, besteht darin, eine Spalte als AUTO_INCREMENT zu definieren und den Rest der Dinge MySQLi zu überlassen.
Beispiel
Probieren Sie das folgende Beispiel aus. Dadurch wird eine Tabelle erstellt und anschließend werden einige Zeilen in diese Tabelle eingefügt, in denen keine Datensatz-ID angegeben werden muss, da diese von MySQLi automatisch erhöht wird.
mysql>CREATE TABLE tutorials_auto(
id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(30) NOT NULL,PRIMARY KEY(id));
Query OK, 0 rows affected (0.28 sec)
mysql>INSERT INTO tutorials_auto(id,name) VALUES(NULL,'sai'),(NULL,'ram');
Query OK, 2 rows affected (0.12 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM insect ORDER BY id;
+----+------+
| id | name |
+----+------+
| 1 | sai |
| 2 | ram |
+----+------+
2 rows in set (0.05 sec)
Erhalten Sie AUTO_INCREMENT-Werte
LAST_INSERT_ID () ist eine SQL-Funktion, sodass Sie sie von jedem Client aus verwenden können, der versteht, wie SQL-Anweisungen ausgegeben werden. Andernfalls bieten PERL- und PHP-Skripte exklusive Funktionen zum Abrufen des automatisch inkrementierten Werts des letzten Datensatzes.
PERL Beispiel
Verwenden Sie das Attribut mysql_insertid, um den von einer Abfrage generierten Wert AUTO_INCREMENT abzurufen. Der Zugriff auf dieses Attribut erfolgt entweder über ein Datenbankhandle oder ein Anweisungshandle, je nachdem, wie Sie die Abfrage ausgeben. Das folgende Beispiel verweist über das Datenbankhandle darauf:
$dbh->do ("INSERT INTO tutorials_auto (name,date,origin)
VALUES('moth','2001-09-14','windowsill')");
my $seq = $dbh->{mysqli_insertid};
PHP Beispiel
Rufen Sie nach dem Ausgeben einer Abfrage, die einen AUTO_INCREMENT-Wert generiert, den Wert ab, indem Sie mysql_insert_id () - aufrufen.
mysql_query ("INSERT INTO tutorials_auto (name,date,origin)
VALUES('moth','2001-09-14','windowsill')", $conn_id);
$seq = mysqli_insert_id ($conn_id);
Bestehende Sequenz neu nummerieren
Es kann vorkommen, dass Sie viele Datensätze aus einer Tabelle gelöscht haben und alle Datensätze neu sortieren möchten. Dies kann mit einem einfachen Trick geschehen, aber Sie sollten sehr vorsichtig sein, wenn Ihre Tabelle Verknüpfungen mit anderen Tabellen aufweist.
Wenn Sie feststellen, dass eine erneute Sequenzierung einer AUTO_INCREMENT-Spalte unvermeidbar ist, löschen Sie die Spalte aus der Tabelle und fügen Sie sie erneut hinzu. Das folgende Beispiel zeigt, wie die ID-Werte in der Insektentabelle mit dieser Technik neu nummeriert werden:
mysql> ALTER TABLE tutorials_auto DROP id;
mysql> ALTER TABLE tutorials_auto
-> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
-> ADD PRIMARY KEY (id);
Starten einer Sequenz bei einem bestimmten Wert
Standardmäßig startet MySQLi die Sequenz mit 1, Sie können jedoch zum Zeitpunkt der Tabellenerstellung auch eine andere Nummer angeben. Das folgende Beispiel zeigt, wie MySQLi die Sequenz ab 100 startet.
mysql> CREATE TABLE tutorials_auto
-> (
-> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,
-> PRIMARY KEY (id),
-> name VARCHAR(30) NOT NULL,
-> );
Alternativ können Sie die Tabelle erstellen und dann mit ALTER TABLE den anfänglichen Sequenzwert festlegen.
mysql> ALTER TABLE tutorials_auto AUTO_INCREMENT = 100;