В комментарии к пояснению поясняется, что вы заинтересованы в том, чтобы LAST_INSERT_ID() не дал неправильный результат, если произойдет другой одновременный INSERT. Будьте уверены, что безопасно использовать LAST_INSERT_ID() независимо от другой одновременной активности. LAST_INSERT_ID() возвращает только самый последний идентификатор, сгенерированный во время текущего сеанса.
Вы можете попробовать сами:
- Открыть два окна оболочки, запустить MySQL клиента в каждом и подключиться к базе данных .
- Shell 1: INSERT в таблицу с ключом AUTO_INCREMENT.
- Shell 1: SELECT LAST_INSERT_ID(), см. Результат.
- Shell 2: INSERT в ту же таблицу.
- оболочки 2: SELECT LAST_INSERT_ID(), см результат, отличный от оболочки 1.
- Shell 1: SELECT LAST_INSERT_ID() снова увидеть повторение ранее результата.
Если вы думаете об этом, это единственный способ, который имеет смысл. Все базы данных, которые поддерживают механизмы автоинкрементного ключа, должны действовать таким образом. Если результат зависит от состояния гонки с другими клиентами, возможно, одновременно с INSERTing, тогда не будет надежного способа получить последнее вставленное значение идентификатора в текущем сеансе.
Уточнение: У кода есть вставка затем last_insert_id. Два из этих утверждений выполнять почти одновременно и ехес порядок превращается в вставки # 1 вставки # 2 last_insert_id # 1 Завершает и возвращает идентификатор из вставки # 2 last_insert_id # 2 Завершает и возвращает идентификатор из вставки # 2 Возможно ли это? – MPX 2008-10-03 00:30:29