MySQL (jak zdają się wskazywać, ze znacznikami na swoje pytanie) funkcja db_last_insert_id()
jest zdefiniowana w ten sposób:
function db_last_insert_id($table, $field) {
return db_result(db_query('SELECT LAST_INSERT_ID()'));
}
w database.mysql-common.inc
I LAST_INSERT_ID()
zależy od połączenie (cytowanie, podkreślenie moje):
Generowany identyfikator to utrzymywany na serwerze na podstawie na połączenie. Oznacza to, że wartość zwracana przez funkcję do danego klienta jest pierwszą wartością o wartości AUTO_INCREMENT
wygenerowaną dla najnowszej instrukcji wpływającej na kolumnę AUTO_INCREMENT tego klienta. Na tę wartość nie mają wpływu inne klienty , nawet jeśli same generują wartości o wartości AUTO_INCREMENT
. Takie zachowanie sprawia, że każdy klient można odzyskać swój identyfikator bez troski o aktywności innych klientów, bez konieczności zamków lub transakcjami.
Tak, powiedziałbym, że to jest całkiem OK dla MySQL ;-)
Definicja Twój pisał jest rzeczywiście jeden używany dla PostgreSQL:
function db_last_insert_id($table, $field) {
return db_result(db_query("SELECT CURRVAL('{". db_escape_table($table) ."}_". db_escape_table($field) ."_seq')"));
}
W database.pgsql.inc
Od pgsql manual on sequences(cytowanie, nacisk mi ne):
currval
zwracają wartość ostatnio uzyskane przez nextval dla tej sekwencji w bieżącej sesji.(Błąd jest zgłaszane jeśli nextval nigdy nie było nazwie dla tej sekwencji w tej sesji .) Zauważ, że ponieważ jest to powrocie wartość session-local, to daje odpowiedź przewidywalne czy nie inne sesje Wykonaliśmy Nextval od bieżącej sesji zrobił.
Zgaduję więc, że to całkiem OK, dla PostGreSQL.
Dziękuję. Chciałbym dać ci dziesięć UPS. – coderama
Nie ma za co :-) huhu ^^ będziesz musiał zadać 10 innych pytań, na które znam odpowiedź :-D –