Управление изменением нумерации строк

Задача
Вы упорядочили столбец повторно, но MySQL нумерует строки не в том порядке, как вам хотелось бы.

Решение
Отберите строки в другую таблицу, используя инструкцию ORDER BY для размещения их в нужном порядке, и позвольте MySQL пронумеровать их. Строки будут пронумерованы в порядке сортировки.

Обсуждение
Когда вы повторно упорядочиваете столбец AUTO_INCREMENT, MySQL может выбирать строки таблицы в любом порядке, который совсем не обязательно совпадет с ожидаемым вами. Это не имеет значения, если важно только наличие у каждой строки уникального идентификатора. Но бывают приложения, в которых необходимо, чтобы строки были пронумерованы в каком-то определенном порядке. Например, вы можете захотеть, чтобы последовательность соответствовала порядку создания строк, указанному в столбце TIMESTAMP. Для присваивания номеров в определенном порядке выполните такую процедуру:

1. Создайте пустой клон таблицы.

2. Скопируйте туда строки исходной таблицы, используя INSERT INTO ... SELECT. Копируйте все столбцы, кроме столбца последовательности, применяя инструкцию ORDER BY для указания порядка копирования строк (и, следовательно, присваивания номеров последовательности).

3.


Удалите исходную таблицу и переименуйте клон, присвоив ему имя удаленной таблицы.

4. Если таблица большая и имеет много индексов, эффективнее сначала создать новую таблицу только с одним индексом для столбца AUTO_INCREMENT, затем скопировать исходную таблицу в новую, а потом уже добавить недостающие индексы.

А можно поступить и по-другому:

1. Создать новую таблицу, содержащую все столбцы исходной, кроме AUTO_INCREMENT.

2. Скопировать столбцы не-AUTO_INCREMENT из исходной таблицы в новую с помощью INSERT INTO ... SELECT.

3. Удалить строки из исходной таблицы и (если необходимо) установить счетчик последовательности в 1.

4. Скопировать строки из новой таблицы обратно в исходную, используя инструкцию ORDER BY для сортировки строк в том порядке, в котором им должны быть присвоены номера последовательности.

Если вы выполняете одну из описанных выше процедур в программе, которая не имеет достаточных сведений о структуре таблицы, используйте метаданные таблицы для получения списка имен столбцов и определения того, какой из столбцов имеет атрибут AUTO_INCREMENT.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела MySQL на эту тему:
Генераторы однострочных последовательностей
Генерирование значений последовательности
Добавление последовательности в существующую таблицу
Извлечение значений последовательности
Использование значений AUTO_INCREMENT для связывания таблиц