Wenn ich eine einzelne Zeile INSERTzu einer Tabelle mit einer AUTO_INCREMENTSpalte mache, möchte ich die LAST_INSERT_ID()Funktion verwenden, um den neuen AUTO_INCREMENTWert 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_IDENTITYund @@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_INCREMENTWert der erste Wert ist, der für die letzte Anweisung generiert wurde, die sich auf eineAUTO_INCREMENTSpalte dieses Clients auswirkt . Dieser Wert kann von anderen Clients nicht beeinflusst werden, selbst wenn sieAUTO_INCREMENTeigene 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_INCREMENTSpalten 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.