Есть ли способ получить последний вставленный идентификатор NON - автоматически увеличенный столбец в MySQL? - PullRequest
16 голосов
/ 05 января 2012

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

Есть ли способ, которым я могу это сделать?

Ответы [ 5 ]

15 голосов
/ 05 января 2012

Вы можете легко сделать это, используя тот же LAST_INSERT_ID().

INSERT INTO thetable (id, value)
VALUES (LAST_INSERT_ID(126), 'some data');

SELECT LAST_INSERT_ID();  -- returns 126
2 голосов
/ 05 января 2012

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

Единственный способ получить это - это иметь в таблице еще один столбец, который может указывать, какая строка была вставлена ​​последней, например столбец отметки времени или даты и времени. Если ваши идентификаторы уникальны и увеличиваются, вы можете просто использовать этот столбец. Затем вы просто выбираете 1 строку, упорядоченную по этому столбцу в порядке убывания.

Например

INSERT INTO my_table (id, timestamp) VALUES (123, NOW())

SELECT id FROM my_table ORDER BY timestamp DESC LIMIT 1

Edit: согласно комментариям ниже, вам гораздо лучше использовать столбец AUTO_INCREMENT, хотя этот столбец не обязательно должен быть столбцом id, вы можете добавить столбец с автоинкрементом insert_order типа Int и просто упорядочить по этому.

1 голос
/ 05 января 2012

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

В этом случае вы можете использовать GUID в качестве идентификатора. GUID обычно хранится в виде строки длиной 36 или 16-байтового двоичного объекта. GUID может быть создан перед вставкой строки, а затем может быть сохранен при вставке строки.

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

0 голосов
/ 05 января 2012

Там нет никакого пути с MySQL.Но вы можете сделать это программно.Без автоинкрементного столбца идентификатора база данных не сможет узнать, какие записи были добавлены последними.

Один из способов сделать это - использовать столбец, содержащий метки времени или даты и времени.и получить идентификатор последнего значения tmestamp для получения последней вставленной записи

0 голосов
/ 05 января 2012

номер

Нет внутреннего порядка отношений, нет «последней вставленной записи». Вот почему, в конце концов, существует поле AUTO_INCREMENT.

Вы должны заглянуть в журналы или кешировать значение внутри своего приложения.

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