Простой вопрос MySQL относительно первичных ключей и вставки - PullRequest
8 голосов
/ 03 октября 2008

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

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

Спасибо!

Ответы [ 4 ]

12 голосов
/ 03 октября 2008

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

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

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

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

6 голосов
/ 03 октября 2008
0 голосов
/ 03 октября 2008

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

0 голосов
/ 03 октября 2008

Документы MySQL описывают функцию: LAST_INSERT_ID ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...