Получение последних вставленных идентификаторов для нескольких строк

А также вышеупомянутые ответы, Проект Кода является сайтом ASP.NET.

23
задан George Cummins 13 May 2013 в 21:00
поделиться

2 ответа

Есть несколько подходов, которые я бы использовал на своем месте:

Во-первых, есть поле CreateDate со значением по умолчанию CURRENT_TIMESTAMP метод. По сути, вы выбираете CURRENT_TIMESTAMP , чтобы получить дату, запускаете вставку, а затем выбираете идентификатор из таблицы, где CreateDate> $ mytimestamp .

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

2
ответ дан 29 November 2019 в 02:22
поделиться

Вызов last_insert_id () дает вам идентификатор ПЕРВОЙ строки, вставленной в последний пакет. Все остальные вставленные гарантированно будут последовательными.

Если вы не делаете что-то очень странное, это позволяет достаточно легко вычислить ID каждой строки.

На самом деле поведение меняется в 5.1 в зависимости от настройки параметра параметр режима автоматического увеличения innodb; это не имеет значения. Пока вы не измените его значение по умолчанию, вы увидите ожидаемое поведение.

Бывают случайные случаи, когда это не делает то, что вы ожидаете, и бесполезно - например, если вы выполняете ON DUPLICATE KEY ОБНОВИТЬ или ВСТАВИТЬ ИГНОРИРОВАТЬ. В этих случаях вам нужно будет сделать что-то еще, чтобы вычислить идентификаторы каждой строки.

Но для простого пакета INSERT без значений, указанных для столбца auto-inc, это просто.

Полное описание того, как автоинкременты обрабатываются в innodb, можно найти здесь

33
ответ дан 29 November 2019 в 02:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: