Когда я делаю одну строку INSERT
в таблице, в которой есть AUTO_INCREMENT
столбец, я хотел бы использовать LAST_INSERT_ID()
функцию для возврата нового AUTO_INCREMENT
значения ed, сохраненного для этой строки.
Поскольку многие разработчики и администраторы Microsoft SQL Server, без сомнения, знают, что эквивалентная функциональность в SQL Server ( SCOPE_IDENTITY
и @@IDENTITY
) не обошлась без проблем .
Я знаю состояние документов MySQL:
Сгенерированный идентификатор поддерживается на сервере для каждого подключения . Это означает, что значение, возвращаемое функцией данному клиенту, является первым
AUTO_INCREMENT
значением, сгенерированным для самого последнего оператора, влияющего наAUTO_INCREMENT
столбец этим клиентом . На это значение не могут повлиять другие клиенты, даже если они генерируютAUTO_INCREMENT
собственные значения. Такое поведение гарантирует, что каждый клиент может получить свой собственный идентификатор, не заботясь об активности других клиентов и не нуждаясь в блокировках или транзакциях.
и даже зайти так далеко, чтобы сказать:
Использование столбцов
LAST_INSERT_ID()
иAUTO_INCREMENT
столбцов одновременно от нескольких клиентов вполне допустимо.
Существуют ли какие-либо известные риски или сценарии, которые могут привести LAST_INSERT_ID()
к неправильному возвращению значения?
Я использую MySQL 5.5 на CentOS 5.5 x64 и Fedora 16 x64 и движок InnoDB.