Wenn ich eine einzelne Zeile INSERT
zu einer Tabelle mit einer AUTO_INCREMENT
Spalte mache, möchte ich die LAST_INSERT_ID()
Funktion verwenden, um den neuen AUTO_INCREMENT
Wert zurückzugeben, der für diese Zeile gespeichert ist.
Da viele Microsoft SQL Server-Entwickler und -Administratoren zweifellos wissen, dass die entsprechende Funktionalität in SQL Server ( SCOPE_IDENTITY
und @@IDENTITY
) nicht ohne Probleme war .
Ich kenne den MySQL-Dokumentstatus:
Die generierte ID wird pro Verbindung auf dem Server verwaltet . Dies bedeutet, dass der von der Funktion an einen bestimmten Client zurückgegebene
AUTO_INCREMENT
Wert der erste Wert ist, der für die letzte Anweisung generiert wurde, die sich auf eineAUTO_INCREMENT
Spalte dieses Clients auswirkt . Dieser Wert kann von anderen Clients nicht beeinflusst werden, selbst wenn sieAUTO_INCREMENT
eigene Werte generieren . Durch dieses Verhalten wird sichergestellt, dass jeder Client seine eigene ID abrufen kann, ohne die Aktivität anderer Clients zu berücksichtigen und ohne dass Sperren oder Transaktionen erforderlich sind.
und sogar so weit gehen zu sagen:
Die gleichzeitige Verwendung von
LAST_INSERT_ID()
undAUTO_INCREMENT
Spalten von mehreren Clients ist vollkommen gültig.
Gibt es bekannte Risiken oder Szenarien, die dazu führen können, dass LAST_INSERT_ID()
nicht der richtige Wert zurückgegeben wird?
Ich verwende MySQL 5.5 unter CentOS 5.5 x64 und Fedora 16 x64 und der InnoDB-Engine.
last_insert_id()
zu beurteilen, ob eine Abfrage erfolgreich war. Es ist immerhin die letzte eingefügte ID, die Werte enthält, die Sie benötigen, wenn Sie bereits gewusst haben, dass Sie erfolgreich waren.