Может ли mysqli_insert_id возвращать неверный идентификатор в приложениях с высоким трафиком?

В приложении с высоким трафиком может ли mysqli_insert_id() вернуть неверный идентификатор или спутать идентификатор между двумя запросами INSERT, выполняемыми почти одновременно?


person Art Ianuzzi    schedule 16.02.2012    source источник
comment
К вашему сведению, это называется условием гонки.   -  person Mike B    schedule 16.02.2012


Ответы (4)


mysqli_insert_id возвращает наибольшее значение AUTO_INCREMENT из самого последнего запроса INSERT для текущего соединения. Например, его никогда не спутаешь с другим подключением.

person Niet the Dark Absol    schedule 16.02.2012

Нет. Как я могу быть так уверен? Потому что об этом сообщили бы и исправили бы давно назад.

person Ignacio Vazquez-Abrams    schedule 16.02.2012

Цитата из предыдущего ответа на этот же вопрос:

Посмотрите на http://dev.mysql.com/doc/refman/5.6/en/getting-unique-id.html для получения дополнительной информации говорится следующее:

«Для LAST_INSERT_ID() самый последний сгенерированный идентификатор сохраняется на сервере для каждого соединения. Он не изменяется другим клиентом. Он даже не изменяется, если вы обновляете другой столбец AUTO_INCREMENT немагическим значением (то есть, значение, которое не равно NULL и не равно 0). Использование столбцов LAST_INSERT_ID() и AUTO_INCREMENT одновременно от нескольких клиентов совершенно допустимо. Каждый клиент получит последний вставленный идентификатор для последнего оператора, который выполнил клиент».

Таким образом, вы должны быть в порядке, делая то, что хотите, и вы не должны получать странных результатов.

person Mark Baker    schedule 16.02.2012

Да это возможно! Если у вас есть несколько таблиц для вставки с одним и тем же соединением, и ваша последняя вставка была неправильной (например, я пытаюсь вставить неэкранированные кавычки в текст).

Я думаю, что он возвращает последний идентификатор успешной вставки, который может быть из другой таблицы. Я только что потратил час, чтобы найти это. Мир

person Pavel Salaquarda    schedule 29.03.2018
comment
Хотя это не то, о чем задавался вопрос. Вы описываете ситуацию, когда вы игнорируете сообщения об ошибках, а затем путаетесь с идентификатором. Это на вас за то, что вы замалчиваете отчеты об ошибках. mysqli_insert_id() всегда будет возвращать правильный идентификатор. - person Dharman; 17.06.2020