Можно ли получить автоматически увеличивающиеся идентификаторы из запроса, который вставляет несколько строк? например:
INSERT INTO таблица (col1, col2) ЗНАЧЕНИЯ (1, 2), (3, 4), (5, 6);
Альтернативно, есть ли способ найти значение NEXT auto increment БЕЗ вставки чего-либо в таблицу?
благодаря
Насколько я знаю, auto_increment не заполняет промежутки между ids, и операция является атомарной. Поэтому вы можете предположить, что они будут в ряду.
http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id
Если вы вставляете несколько строк с помощью одного оператора
INSERT
,LAST_INSERT_ID()
возвращает значение, сгенерированное только для первой вставленной строки.
Так что нет, вы не можете легко получить все идентификаторы, но можете предположить, что они непрерывны. Однако вы никогда не должны полагаться на предположения. Похоже, вы хотите угадать следующий id
, который появится после вашей объемной вставки? Если это так, даже не пытайтесь это сделать и думать о другом способе делать то, что вы хотите сделать. 🙂
Чтобы получить следующий идентификатор auto_increment, вы можете использовать:
SELECT auto_increment FROM information_schema.tables WHERE table_name = 'table-you-want-to-check';
Однако вы не можете полагаться на идентификатор auto_increment
или last_insert_id()
в логике вашего кода. Например, скажем, два человека, A & B, добавляют вопросы к вашему db last_insert_id()
в тот же момент, и вы используете last_insert_id()
для определения идентификатора вопроса человека. Что происходит, когда они оба одновременно задают свой вопрос? Является ли last_insert_id()
от лица A или B?
Одним из способов преодоления этой проблемы является использование «предварительно определенного» идентификатора или указателя в дополнение к или вместо идентификатора с автоматическим добавлением.