2008-10-03 2 views
8

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

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

Спасибо!

+0

Уточнение: У кода есть вставка затем last_insert_id. Два из этих утверждений выполнять почти одновременно и ехес порядок превращается в вставки # 1 вставки # 2 last_insert_id # 1 Завершает и возвращает идентификатор из вставки # 2 last_insert_id # 2 Завершает и возвращает идентификатор из вставки # 2 Возможно ли это? – MPX 2008-10-03 00:30:29

ответ

12

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

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

  1. Открыть два окна оболочки, запустить MySQL клиента в каждом и подключиться к базе данных .
  2. Shell 1: INSERT в таблицу с ключом AUTO_INCREMENT.
  3. Shell 1: SELECT LAST_INSERT_ID(), см. Результат.
  4. Shell 2: INSERT в ту же таблицу.
  5. оболочки 2: SELECT LAST_INSERT_ID(), см результат, отличный от оболочки 1.
  6. Shell 1: SELECT LAST_INSERT_ID() снова увидеть повторение ранее результата.

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

+0

Спасибо! Именно то, что я хотел. – MPX 2008-10-03 00:46:29

0

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