MySQL verwenden (wie Sie mit den Tags in Ihrer Frage anzudeuten scheinen) die Funktion db_last_insert_id()
ist folgendermaßen definiert:
function db_last_insert_id($table, $field) {
return db_result(db_query('SELECT LAST_INSERT_ID()'));
}
in database.mysql-common.inc
Und LAST_INSERT_ID()
hängt von der Verbindung ab (zitiert, Hervorhebung von mir) :
Die erzeugte ID lautet im Server auf einer pro Verbindung verwaltet. Das bedeutet, dass der Wert, der von der Funktion an einem bestimmten Client zurückgegeben wird, der erste AUTO_INCREMENT
Wert erzeugt für letzte Anweisung, die sich auf eine AUTO_INCREMENT-Spalte durch diesen Client. Dieser Wert kann von anderen Clients nicht beeinflußt werden Clients beeinflusst werden, selbst wenn diese AUTO_INCREMENT
ihre eigenen Werte. Dieses Verhalten stellt sicher, dass jeder Client kann seine eigene ID abrufen, ohne ohne Rücksicht auf die Aktivitäten der anderen Clients und ohne die Notwendigkeit von Sperren oder Transaktionen.
Ich würde also sagen, dass dies für MySQL ganz OK ist ;-)
Die von Ihnen gepostete Definition ist diejenige, die für PostGreSQL verwendet wird:
function db_last_insert_id($table, $field) {
return db_result(db_query("SELECT CURRVAL('{". db_escape_table($table) ."}_". db_escape_table($field) ."_seq')"));
}
Unter database.pgsql.inc
Von pgsql-Handbuch über Sequenzen (Zitat; Hervorhebung von mir) :
currval
Rückgabe des letzten Wertes durch nextval für diese Sequenz erhalten wurde in der aktuellen Sitzung . (Ein Fehler wird gemeldet, wenn nextval noch nie für diese Sequenz in dieser Sitzung aufgerufen wurde.) Beachten Sie, dass, da es sich um einen session-lokalen Wert zurückgibt, es gibt eine vorhersehbare Antwort, unabhängig davon keine anderen Sitzungen ausgeführt haben nextval ausgeführt haben, seit die aktuelle Sitzung .
Ich nehme also an, dass dies auch für PostGreSQL in Ordnung ist.