Возможно ли, чтобы 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