Простой вопрос mysql относительно первичных ключей и вставки

StackOverflow https://stackoverflow.com/questions/165156

  •  03-07-2019
  •  | 
  •  

Вопрос

В mysql, как мне получить первичный ключ, используемый для операции вставки, когда она выполняется автоматически.

По сути, я хочу, чтобы новое автоматически добавленное значение было возвращено по завершении выполнения инструкции.

Спасибо!

Это было полезно?

Решение

В вашем поясняющем комментарии говорится, что вы заинтересованы в том, чтобы убедиться, что LAST_INSERT_ID() не дает неправильного результата, если происходит другая параллельная ВСТАВКА.Будьте уверены, что безопасно использовать LAST_INSERT_ID() независимо от других параллельных действий.LAST_INSERT_ID() возвращает только самый последний идентификатор, сгенерированный во время текущего сеанса.

Вы можете попробовать это сами:

  1. Откройте два окна командной строки, запустите mysql клиент в каждом и подключитесь к базе данных.
  2. Оболочка 1:ВСТАВИТЬ в таблицу с помощью ключа AUTO_INCREMENT.
  3. Оболочка 1:ВЫБЕРИТЕ LAST_INSERT_ID(), посмотрите результат.
  4. Оболочка 2:ВСТАВИТЬ в ту же таблицу.
  5. Оболочка 2:ВЫБЕРИТЕ LAST_INSERT_ID(), увидите результат, отличный от shell 1.
  6. Оболочка 1:ВЫБЕРИТЕ LAST_INSERT_ID() снова увидите повторение предыдущего результат.

Если вы подумаете об этом, это единственный способ, который имеет смысл.Все базы данных, которые поддерживают механизмы автоматического увеличения ключей, должны действовать таким образом.Если результат зависит от условия гонки с возможностью одновременной вставки другими клиентами, то не будет надежного способа получить последнее вставленное значение ID в вашем текущем сеансе.

Другие советы

Документы MySQL описывают эту функцию: LAST_INSERT_ID() ПОСЛЕДНИЙ ИДЕНТИФИКАТОР()

[выберите max(primary_key_column_name) из table_name] Аааа, необязательно.Я не специалист по MySQL, но есть конкретный способ получить последний вставленный идентификатор для последнего завершенного действия, который немного более надежен, чем этот.Что делать, если между записью в таблицу и запросом к ней произошла вставка?Я знаю об этом, потому что это ужалило меня много лун назад (так что да, это случается).Если все остальное не помогает, прочтите руководство: http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top