Ответ 1
вы можете легко сделать это, используя тот же LAST_INSERT_ID()
.
INSERT INTO thetable (id, value)
VALUES (LAST_INSERT_ID(126), 'some data');
SELECT LAST_INSERT_ID(); -- returns 126
Я знаю, как LAST_INSERT_ID() работает для автоматически увеличиваемых столбцов, но я не могу найти способ получить последний идентификатор, который я вставил для столбца с неавтоматическим увеличением.
Есть ли способ, которым я могу это сделать?
вы можете легко сделать это, используя тот же LAST_INSERT_ID()
.
INSERT INTO thetable (id, value)
VALUES (LAST_INSERT_ID(126), 'some data');
SELECT LAST_INSERT_ID(); -- returns 126
Я предполагаю, что вы хотите получить этот последний вставленный идентификатор в какой-то более поздний момент после его вставки, поскольку, если вам это нужно сразу после его вставки, вы, очевидно, уже знаете, что такое идентификатор.
Единственный способ, которым вы сможете получить это, - это иметь другой столбец в таблице, который может указывать, какая строка была последней вставлена, например столбец timestamp или datetime. Если ваши идентификаторы уникальны и увеличиваются, вы можете просто использовать эту колонку. Затем вы просто выбираете 1 строку, упорядоченную этим столбцом в порядке убывания.
Например
INSERT INTO my_table (id, timestamp) VALUES (123, NOW())
SELECT id FROM my_table ORDER BY timestamp DESC LIMIT 1
Изменить: согласно приведенным ниже комментариям, вам гораздо лучше использовать столбец AUTO_INCREMENT, хотя этот столбец не должен быть столбцом id
, вы можете добавить столбец с автоматическим приращением insert_order
типа Int
и просто упорядочить это.
Я предполагаю, что вам нужен идентификатор, чтобы найти только что вставленную строку, вместо того чтобы найти последнюю вставленную строку. В веб-приложении вы никогда не можете быть уверены, что последняя вставленная строка - это та, которую вы только что создали.
В этом случае вы можете использовать идентификатор GUID. GUID обычно хранится как строка длиной 36 или как 16-байтовая блоба. GUID может быть создан до вставки строки, а затем может быть сохранен при вставке строки.
Поскольку идентификатор не увеличивается автоматически по мере того, как вы заявляли, вы должны его сгенерировать, прежде чем вставлять строку. Самый безопасный способ сделать это - создать GUID, который должен быть достаточно уникальным. В противном случае вам нужно будет определить последний неиспользуемый идентификатор, что может быть сложным и рискованным.
Нет.
Нет никакого неотъемлемого упорядочения отношений, нет "последней вставленной записи". Поэтому поле AUTO_INCREMENT
существует.
Вам нужно будет искать в журналах или кэшировать значение самостоятельно в своем приложении.
Нет никакого пути с mysql. Но вы можете сделать это программно. Без столбца с автоматическим инкрементным идентификатором нет возможности для базы данных знать, какие записи были вставлены последними.
Один из способов сделать это - использовать столбец, содержащий отметки времени или даты и времени. и получить идентификатор последнего значения tmestamp для получения последней вставленной записи