Использование MYSQL LAST INSERT ID () для повторного вызова идентификатора вставленной строки?
У меня есть таблица, в которой есть столбец с AUTO INCREMENT. Я должен получить значение этого столбца при вставке новой строки (Мне нужно значение новой строки). Я много читал об этом и нашел разные решения, одно из которых-использовать SELECT LAST_INSERT_ID(). Я слышал много разных вещей об этом. Могу я или не могу использовать это? Я беспокоюсь, что другое соединение может вставить новую строку, прежде чем я смогу вызвать SELECT LAST_INSERT_ID(), и поэтому получу неправильный идентификатор.
Подводя итог, можно ли безопасно использовать
SELECT LAST_INSERT_ID()? Если нет, то как могу ли я получить последний вставленный идентификатор безопасным способом? 5 ответов:
Я не думаю, что вам нужно беспокоиться о деле, которое вы упоминаете здесь.
из документации Mysql:
созданный идентификатор сохраняется на сервере на основе каждого соединения. Это означает, что значение, возвращаемое функцией данному клиенту, является первым значениемAUTO_INCREMENT, сгенерированным для последнего оператора, влияющего на столбецAUTO_INCREMENTэтим клиентом. На это значение не могут повлиять другие клиенты, даже если они генерируют собственные значенияAUTO_INCREMENT. Этот поведение гарантирует, что каждый клиент может получить свой собственный идентификатор, не беспокоясь о действиях других клиентов и не нуждаясь в блокировках или транзакциях.Для получения подробной информации см.
thisХотя, я хотел бы прочитать от других, если у них есть другое мнение.
Если для вас важно иметь последний идентификатор таблицы, вы можете заблокировать таблицу для записи, затем сделать
SELECT MAX(id) FROM table_nameи затем разблокировать таблицу.
Идентификатор генерируется на основе каждого соединения, так что у вас не должно быть никаких проблем! это сообщение Более подробно.
Да, согласно официальной документации, это безопасно:
Созданный идентификатор сохраняется на сервере на основе каждого соединения. Это означает, что значение, возвращаемое функцией данному клиенту, является первым значением AUTO_INCREMENT, созданным для последней инструкции, влияющей на столбец AUTO_INCREMENT этим клиентом. На это значение не могут повлиять другие клиенты, даже если они генерируют собственные значения AUTO_INCREMENT. Такое поведение гарантирует, что каждый клиент может получить свой собственный идентификатор, не заботясь о деятельности других клиентов и не нуждаясь в блокировках или транзакциях.
Если вы используете PDO, используйте
PDO::lastInsertId.И если вы используете mysql, используйте
mysqli::$insert_id.И да, это безопасно использовать
AIэто сообщение, которое говорит это : http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.htmlИ вместо того, чтобы использовать оператор select напрямую, попробуйте использовать
preparedStatement.
Comments