MySQL / 11. Формирование и использование последовательностей

Повторное использование последних значений последовательности

Задача
Вы удалили строки с максимальными номерами последовательности. Можно ли избежать повторного упорядочивания столбца, но при этом заново использовать удаленные значения?

Решение
Да, используйте предложение ALTER TABLE для изменения значения счетчика последовательности. MySQL будет формировать новые номера последовательности, начиная со значения, следующего за текущим максимальным значением, имеющимся в таблице.

Обсуждение
Если вы удалили записи только из верхушки последовательности, то оставшиеся все еще образуют непрерывную последовательность (например, если у вас были записи с номерами от 1 до 100, и вы удалили записи с 91 по 100, то оставшиеся представляют собой монотонную последовательность без разрывов от 1 до 90.) В этом случае нет необходимости в повторной нумерации столбца. Просто сообщите MySQL о том, что нужно возобновить нумерацию со значения, на единицу большего, чем текущий наибольший номер последовательности. Таблицы ISAM и BDB ведут себя так по умолчанию, так что удаленные значения будут использованы повторно без каких-то дополнительных действий с вашей стороны. Для таблиц MyISAM и InnoDB выполните такое предложение:

ALTER TABLE имя_таблицы AUTO_INCREMENT = 1

Тогда MySQL уменьшит счетчик последовательности настолько, насколько это возможно, для создания новых записей.

Вы можете использовать ALTER TABLE для установки нового счетчика последовательности и в тех случаях, когда столбец имеет пропуски в середине, но повторно использованы будут только значения, удаленные из верхушки последовательности. Пропуски не будут заполнены. Предположим, что у вас есть таблица со значениями последовательности от 1 до 10, из которой удаляются записи со значениями 3, 4, 5, 9 и 10. Максимальное из оставшихся значений – это 8, так что если вы выполните ALTER TABLE для переназначения счетчика последовательности, то следующая запись получит в качестве значения последователньости 9, но не 3.

Статьи по MySQL на эту тему:

Генераторы однострочных последовательностей
Добавление последовательности в существующую таблицу
Использование значений AUTO_INCREMENT для связывания таблиц
Как начать последовательность с определенного значения
Последовательная нумерация строк вывода запроса