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

Добавление последовательности в существующую таблицу

Задача
Вы забыли включить столбец AUTO_INCREMENT в таблицу при создании. Теперь уже поздно?

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

Обсуждение
Чтобы добавить последовательность в таблицу, где ее раньше не было, выполните предложение ALTER TABLE для создания столбца AUTO_INCREMENT. Предположим, что у вас есть таблица t, включающая столбцы name и age и не содержащая столбца последовательности:

+----------+------+
| name      | age |
+----------+------+
| boris       | 47   |
| clarence | 62   |
| abner     | 53   |
+----------+------+

Вы можете добавить в таблицу столбец последовательности id следующим образом:

mysql> ALTER TABLE t
-> ADD id INT NOT NULL AUTO_INCREMENT,
-> ADD PRIMARY KEY (id);
mysql> SELECT * FROM t ORDER BY id;

+----------+------+--+
| name      | age | id |
+----------+------+--+
| boris       | 47   | 1 |
| clarence | 62   | 2 |
| abner     | 53   | 3 |
+----------+-----+--+

MySQL автоматически пронумерует строки, вам не нужно присваивать значения самостоятельно – очень удобно.

По умолчанию ALTER TABLE добавляет новые столбцы в конец таблицы. Чтобы поместить столбец в какое-то определенное место, используйте ключевое слово FIRST или AFTER в конце инструкции ADD. Следующие предложения ALTER TABLE аналогичны приведенному выше, но помещают столбец id первым в таблице или после столбца name соответственно:

ALTER TABLE t
ADD id INT NOT NULL AUTO_INCREMENT FIRST,
ADD PRIMARY KEY (id);
ALTER TABLE t
ADD id INT NOT NULL AUTO_INCREMENT AFTER name,
ADD PRIMARY KEY (id);

В таблицах MyISAM можно указать начальное значение для нового столбца последовательности, добавив инструкцию AUTO_INCREMENT = n в предложение ALTER TABLE:

mysql> ALTER TABLE t
-> ADD id INT NOT NULL AUTO_INCREMENT FIRST,
-> ADD PRIMARY KEY (id),
-> AUTO_INCREMENT = 100;
mysql> SELECT * FROM t ORDER BY id;

+-----+----------+-----+
| id     | name     | age |
+-----+----------+-----+
| 100 | boris       | 47   |
| 101 | clarence | 62   |
| 102 | abner     | 53   |
+-----+----------+-----+

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

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