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

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

5 ответов

Решение

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

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

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

Посмотрите на 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 одновременно от нескольких клиентов совершенно допустимо. Каждый клиент получит последний вставленный идентификатор для последнего оператора, выполненного клиентом."

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

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

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

Да, если вы вставите отрицательное число в столбец автоинкремента со знаком int, mysqli_insert_id() вернет 18446744073709551615. Если столбец подписан bigint, mysqli_insert_id() вернет 0 (в обоих случаях запись вставлена ​​правильно) https://bugs.mysql.com/bug.php?id=69228

Другие вопросы по тегам