Использование MYSQL LAST INSERT ID () для повторного вызова идентификатора вставленной строки?



У меня есть таблица, в которой есть столбец с AUTO INCREMENT. Я должен получить значение этого столбца при вставке новой строки (Мне нужно значение новой строки). Я много читал об этом и нашел разные решения, одно из которых-использовать SELECT LAST_INSERT_ID(). Я слышал много разных вещей об этом. Могу я или не могу использовать это? Я беспокоюсь, что другое соединение может вставить новую строку, прежде чем я смогу вызвать SELECT LAST_INSERT_ID(), и поэтому получу неправильный идентификатор.



Подводя итог, можно ли безопасно использовать SELECT LAST_INSERT_ID()? Если нет, то как могу ли я получить последний вставленный идентификатор безопасным способом?
637   5  

5 ответов:

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

из документации Mysql:
созданный идентификатор сохраняется на сервере на основе каждого соединения. Это означает, что значение, возвращаемое функцией данному клиенту, является первым значением AUTO_INCREMENT, сгенерированным для последнего оператора, влияющего на столбец AUTO_INCREMENT этим клиентом. На это значение не могут повлиять другие клиенты, даже если они генерируют собственные значения AUTO_INCREMENT. Этот поведение гарантирует, что каждый клиент может получить свой собственный идентификатор, не беспокоясь о действиях других клиентов и не нуждаясь в блокировках или транзакциях.

Для получения подробной информации см. this

Хотя, я хотел бы прочитать от других, если у них есть другое мнение.

Если для вас важно иметь последний идентификатор таблицы, вы можете заблокировать таблицу для записи, затем сделать SELECT MAX(id) FROM table_name и затем разблокировать таблицу.

Идентификатор генерируется на основе каждого соединения, так что у вас не должно быть никаких проблем! это сообщение Более подробно.

Да, согласно официальной документации, это безопасно:

Созданный идентификатор сохраняется на сервере на основе каждого соединения. Это означает, что значение, возвращаемое функцией данному клиенту, является первым значением AUTO_INCREMENT, созданным для последней инструкции, влияющей на столбец AUTO_INCREMENT этим клиентом. На это значение не могут повлиять другие клиенты, даже если они генерируют собственные значения AUTO_INCREMENT. Такое поведение гарантирует, что каждый клиент может получить свой собственный идентификатор, не заботясь о деятельности других клиентов и не нуждаясь в блокировках или транзакциях.

Взято из: документации MYSQL 12.13. Информационные Функции

Если вы используете PDO, используйте PDO::lastInsertId.

И если вы используете mysql, используйте mysqli::$insert_id.

И да, это безопасно использовать AI это сообщение, которое говорит это : http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html

И вместо того, чтобы использовать оператор select напрямую, попробуйте использовать preparedStatement.

Также можно использовать замок

Comments

    Ничего не найдено.