Wenn Sie einen Datensatz in eine Tabelle mit einer
AUTO_INCREMENT
-Spalte einfügen, können
Sie den in dieser Spalte gespeicherten Wert mit der Funktion
mysql_insert_id()
erhalten.
In Ihren C-Anwendungen können Sie überprüfen, ob ein Wert
in einer UTO_INCREMENT
-Spalte gespeichert
wurde. Hierzu führen Sie folgenden Code aus (der voraussetzt,
dass Sie sich vom Erfolg der Anweisung überzeugt haben). Der
Code ermittelt, ob die Anfrage ein INSERT
mit einem AUTO_INCREMENT
-Index war:
if ((result = mysql_store_result(&mysql)) == 0 && mysql_field_count(&mysql) == 0 && mysql_insert_id(&mysql) != 0) { used_id = mysql_insert_id(&mysql); }
Weitere Informationen finden Sie unter
Abschnitt 24.2.3.36, „mysql_insert_id()
“.
Wurde ein neuer AUTO_INCREMENT
-Wert
generiert, so können Sie diesen auch erhalten, indem Sie die
SELECT LAST_INSERT_ID()
-Anweisung mit
mysql_query()
ausführen und den Wert aus
der Ergebnismenge dieser Anweisung abfragen.
Für LAST_INSERT_ID()
wird die zuletzt
generierte ID für jede Verbindung im Server gespeichert. Sie
wird von keinem anderen Client geändert, noch nicht einmal
dann, wenn Sie eine andere
AUTO_INCREMENT
-Spalte mit einem
nichtmagischen Wert aktualisieren (also einem Wert, der nicht
NULL
und nicht 0
ist).
Wenn Sie die für eine Tabelle generierte ID benutzen und in eine andere Tabelle einfügen möchten, erledigen Sie dies mit SQL-Anweisungen wie diesen:
INSERT INTO foo (auto,text) VALUES(NULL,'text'); # generiert ID durch Einfügen von NULL INSERT INTO foo2 (id,text) VALUES(LAST_INSERT_ID(),'text'); # benutzt ID in einer zweiten Tabelle
Beachten Sie, dass mysql_insert_id()
den
Wert liefert, der in einer
AUTO_INCREMENT
-Spalte gespeichert war, egal
ob dieser Wert automatisch durch Speichern von
NULL
oder 0
generiert
oder als expliziter Wert angegeben wurde.
LAST_INSERT_ID()
liefert nur automatisch
generierte AUTO_INCREMENT
-Werte. Wenn Sie
einen expliziten Wert, der nicht NULL
oder
0
ist, speichern, so beeinflusst dieser
nicht den Rückgabewert von
LAST_INSERT_ID()
.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.