Последовательность – это набор чисел (1, 2, 3 …) которые отсортированы по порядку. Они часто используются в базах данных (далее – БД), так как многие приложения требуют, чтобы каждая запись в таблице содержала уникальное значение, а последовательности являются простым способом их генерирования.
Пример:
При создании таблиц мы часто используем колонки AUTO_INCREMENT:
mysql> CREATE TABLE bug_reports (
ID INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (ID),
BUG_NAME VARCHAR(100) NOT NULL,
REPORT_DATE DATE NOT NULL);
Наша таблица имеет следующую структуру:
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| ID | int(11) | NO | PRI | NULL | auto_increment |
| BUG_NAME | varchar(100) | NO | | NULL | |
| REPORT_DATE | date | NO | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
Теперь выполним вставку данных в нашу таблицу:
mysql> INSERT INTO bug_reports
VALUES
(NULL, 'BUG#123', '2016-06-01'),
(NULL, 'BUG#456', '2016-06-02'),
(NULL, 'BUG#789', '2016-06-03');
В результате мы имеем таблицу, которая содержит следующие данные:
mysql> SELECT * FROM bug_reports;
+----+----------+-------------+
| ID | BUG_NAME | REPORT_DATE |
+----+----------+-------------+
| 1 | BUG#123 | 2016-06-01 |
| 2 | BUG#456 | 2016-06-02 |
| 3 | BUG#789 | 2016-06-03 |
+----+----------+-------------+
3 rows in set (0.00 sec)
Как мы видим ID каждой записи был сгенерирован по возрастанию автоматически.
Очистим нашу таблицу bug_reports с помощью следующего запроса:
mysql> TRUNCATE bug_reports;
Наша таблица теперь пуста:
mysql> SELECT * FROM bug_reports;
Empty set (0.00 sec)
Мы также имеем возможность начать генерирование не с 1 (установлен по умолчанию для RDBMS MySQL), а с другого целого положительного числа (например, 1000) используя следующий запрос:
mysql> ALTER TABLE bug_reports AUTO_INCREMENT = 1000;
Вновь выполним вставку данных в таблицу bug_reports используя следующий запрос:
mysql> INSERT INTO bug_reports
VALUES
(NULL, 'BUG#123', '2016-06-01'),
(NULL, 'BUG#456', '2016-06-02'),
(NULL, 'BUG#789', '2016-06-03');
В результате выполнения данного запроса наша таблицу станет хранить такие данные:
+------+----------+-------------+
| ID | BUG_NAME | REPORT_DATE |
+------+----------+-------------+
| 1000 | BUG#123 | 2016-06-01 |
| 1001 | BUG#456 | 2016-06-02 |
| 1002 | BUG#789 | 2016-06-03 |
+------+----------+-------------+
На этом мы заканчиваем изучение использования последовательностей.
В следующей статье мы рассмотрим обработку дубликатов при работе с MySQL.