Руководство по SQL. Использование последовательностей.

Последовательность – это набор чисел (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.