#sql #mariadb #last-insert-id #sql-returning
#sql #mariadb #last-insert-id #sql-возврат
Вопрос:
В нашей кодовой базе мы используем два разных способа получения ключа автоматического увеличения только что вставленной строки:
Где id
находится INT UNSIGNED NOT NULL AUTO_INCREMENT
, когда создается. Оба обычно возвращают одно и то же значение — проверяется с помощью первого, затем выполняется второе и сравниваются возвращаемые значения — но помимо очевидной разницы, которая RETURNING
может возвращать несколько строк при вставке нескольких строк, и что это позволяет возвращать больше, чем просто ключевой столбец, с целью извлечения вставленного autoувеличенный ключ, каковы практические различия между ними?
Может быть важно знать, что это таблица InnoDB в MariaDB.
Ответ №1:
Первый определенно возвращает идентификатор вставленной строки. Второй может возвращать идентификатор другой строки, если между и была вставлена другая строка INSERT
SELECT
.
Комментарии:
1. Интересно. Но поскольку я использую транзакции для всех вставок, возможно ли это по-прежнему? Я немедленно вызываю
LAST_INSERT_ID
— или лучше, я использую для этого библиотеку драйверов (я считаю, что она автоматически вызывается при каждом запросе), произойдет ли это?
Ответ №2:
INSERT . . . RETURNING
намного более гибкий:
- Если хотите, он возвращает несколько выражений, поэтому вы можете возвращать больше значений из вставленной строки, чем просто автоматически увеличенный идентификатор.
- Он возвращает несколько строк.
LAST_INSERT_ID()
на самом деле предназначен для однорядных вставок и просто возвращает один идентификатор. Я рекомендую использовать INSERT . . . RETURNING
.
Комментарии:
1. Я уточнил в вопросе, что вставка нескольких строк является очевидной разницей
Ответ №3:
В случае вставки нескольких строк функция INSERT-RETURNING вернет все идентификаторы, которые были вставлены, тогда как LAST_INSERTED_ID() вернет только один
Комментарии:
1. Я уточнил в вопросе, что вставка нескольких строк является очевидной разницей