MySQL LAST_INSERT_ID(), используемый с несколькими записями. Инструкция INSERT
Если я вставляю несколько записей с циклом, который выполняет одну запись, последний возвращаемый идентификатор возвращается, как и ожидалось, последним. Но если я делаю инструкцию записи нескольких записей:
INSERT INTO people (name,age)
VALUES ('William',25), ('Bart',15), ('Mary',12);
Скажем, три из них - это первые записи, вставленные в таблицу. После инструкции insert я ожидал, что последний идентификатор вставки вернет 3, но он вернул 1. Первый идентификатор вставки для рассматриваемого оператора.
Так может кто-то, пожалуйста, подтвердите, является ли это обычным поведением LAST_INSERT_ID()
в контексте нескольких записей инструкций INSERT. Поэтому я могу создать свой код на нем.
Ответы
Ответ 1
Да. Это поведение last_insert_id()
задокументировано в документах MySQL:
Важно
Если вы вставляете несколько строк, используя один оператор INSERT
, last_insert_id()
возвращает значение, сгенерированное только для первой вставленной строки. Причиной этого является возможность легко воспроизвести тот же оператор INSERT
на другом сервере.
Ответ 2
Это поведение упоминается на странице man для MySQL. Это в комментариях, но не оспаривается, поэтому я предполагаю, что это ожидаемое поведение.