Используя MySQL (как вы, вероятно, указываете с помощью тегов вашего вопроса) , функция db_last_insert_id()
определяется следующим образом:
function db_last_insert_id($table, $field) {
return db_result(db_query('SELECT LAST_INSERT_ID()'));
}
в database.mysql-common.inc
И LAST_INSERT_ID()
зависит от соединения (цитирование, выделено мое) :
Сгенерированный идентификатор
поддерживается на сервере на
на основе подключения. Это означает, что
значение, возвращаемое функцией
данный клиент является первым
AUTO_INCREMENT
значение, сгенерированное для
последнее заявление, затрагивающее
Столбец AUTO_INCREMENT этим клиентом.
Это значение не может зависеть от других
клиенты, даже если они генерируют
AUTO_INCREMENT
значения свои.
Такое поведение гарантирует, что каждый клиент
может получить свой собственный идентификатор без
забота о деятельности других
клиенты и без необходимости
блокировки или транзакции.
Итак, я бы сказал, что это вполне нормально для MySQL; -)
На самом деле, ваше опубликованное определение используется для PostGreSQL:
function db_last_insert_id($table, $field) {
return db_result(db_query("SELECT CURRVAL('{". db_escape_table($table) ."}_". db_escape_table($field) ."_seq')"));
}
В database.pgsql.inc
Из pgsql руководства по последовательностям (цитирование; выделено мое) :
currval
Вернуть значение в последний раз
полученный nextval для этой последовательности
в текущем сеансе . (Ошибка
сообщается, если nextval никогда не был
призвал к этой последовательности в этом
сессия.) Обратите внимание, потому что это
возвращая локальное значение сеанса, это
дает предсказуемый ответ или
не другие сессии выполнили
nextval, поскольку текущий сеанс сделал .
Итак, я полагаю, это тоже нормально, для PostGreSQL.