Выражение CREATE SEQUENCE
Выражение CREATE SEQUENCE создаёт новый генератор последовательности чисел.
Примеры
Генерировать возрастающую последовательность, начиная с 1:
CREATE SEQUENCE serial;
Генерировать последовательность, начиная с заданного числа:
CREATE SEQUENCE serial START 101;
Генерировать нечётные числа, используя INCREMENT BY:
CREATE SEQUENCE serial START WITH 1 INCREMENT BY 2;
Генерировать убывающую последовательность, начиная с 99:
CREATE SEQUENCE serial START WITH 99 INCREMENT BY -1 MAXVALUE 99;
По умолчанию циклы запрещены и приведут к ошибке, например:
Sequence Error: nextval: reached maximum value of sequence "serial" (10)
CREATE SEQUENCE serial START WITH 1 MAXVALUE 10;
CYCLE позволяет многократно циклически использовать одну и ту же последовательность:
CREATE SEQUENCE serial START WITH 1 MAXVALUE 10 CYCLE;
Создание и удаление последовательностей
Последовательности можно создавать и удалять аналогично другим элементам каталога.
Перезаписать существующую последовательность:
CREATE OR REPLACE SEQUENCE serial;
Создать последовательность только в случае, если такая последовательность ещё не существует:
CREATE SEQUENCE IF NOT EXISTS serial;
Удалить последовательность:
DROP SEQUENCE serial;
Удалить последовательность, если она существует:
DROP SEQUENCE IF EXISTS serial;
Использование последовательностей для первичных ключей
Последовательности могут предоставлять целочисленный первичный ключ для таблицы. Например:
CREATE SEQUENCE id_sequence START 1;
CREATE TABLE tbl (id INTEGER DEFAULT nextval('id_sequence'), s VARCHAR);
INSERT INTO tbl (s) VALUES ('hello'), ('world');
SELECT * FROM tbl; Результат выполнения скрипта:
| id | s |
|---|---|
| 1 | hello |
| 2 | world |
Последовательности также можно добавить, используя выражение ALTER TABLE. В следующем примере добавляется столбец id и заполняется значениями, сгенерированными последовательностью:
CREATE TABLE tbl (s VARCHAR);
INSERT INTO tbl VALUES ('hello'), ('world');
CREATE SEQUENCE id_sequence START 1;
ALTER TABLE tbl ADD COLUMN id INTEGER DEFAULT nextval('id_sequence');
SELECT * FROM tbl; Этот скрипт даёт ту же самую таблицу, что и предыдущий пример.
Выбор следующего значения
Чтобы выбрать следующее число из последовательности, используйте nextval:
CREATE SEQUENCE serial START 1;
SELECT nextval('serial') AS nextval; | nextval |
|---|
| 1 |
Использование этой последовательности в команде INSERT:
INSERT INTO distributors VALUES (nextval('serial'), 'nothing'); Выбор текущего значения
Вы также можете просмотреть текущее число из последовательности. Обратите внимание, что функция nextval должна быть вызвана до вызова currval, в противном случае будет выброшено исключение Serialization Error (sequence is not yet defined in this session).
CREATE SEQUENCE serial START 1;
SELECT nextval('serial') AS nextval;
SELECT currval('serial') AS currval; | currval |
|---|
| 1 |
Синтаксис
CREATE SEQUENCE создаёт новый генератор последовательности чисел.
Если указано имя схемы, то последовательность создаётся в указанной схеме. В противном случае она создаётся в текущей схеме. Временные последовательности существуют в специальной схеме, поэтому имя схемы не может быть указано при создании временной последовательности. Имя последовательности должно отличаться от имени любой другой последовательности в той же схеме.
После создания последовательности вы используете функцию nextval для работы с последовательностью.
Параметры
| Имя | Описание |
|---|---|
CYCLE или NO CYCLE
| Опция CYCLE позволяет последовательности циклически повторяться, когда maxvalue или minvalue достигнуты возрастающей или убывающей последовательностью соответственно. Если предел достигнут, следующее сгенерированное число будет minvalue или maxvalue, соответственно. Если указано NO CYCLE, любые вызовы nextval после того, как последовательность достигла максимального значения, вернут ошибку. Если ни CYCLE ни NO CYCLE не указаны, NO CYCLE используется по умолчанию. |
increment | Необязательная часть INCREMENT BY increment определяет, какое значение добавляется к текущему значению последовательности, чтобы создать новое значение. Положительное значение создаёт возрастающую последовательность, отрицательное - убывающую. По умолчанию значение 1. |
maxvalue | Необязательная часть MAXVALUE maxvalue определяет максимальное значение для последовательности. Если эта часть не указана или указана NO MAXVALUE, будут использованы значения по умолчанию. Значения по умолчанию — 2^63 - 1 и -1 для возрастающих и убывающих последовательностей соответственно. |
minvalue | Необязательная часть MINVALUE minvalue определяет минимальное значение, которое может сгенерировать последовательность. Если эта часть не указана или указана NO MINVALUE, будут использованы значения по умолчанию. Значения по умолчанию — 1 и -(2^63 - 1) для возрастающих и убывающих последовательностей соответственно. |
name | Имя (возможно, с указанием схемы) создаваемой последовательности. |
start | Необязательная часть START WITH start позволяет начать последовательность с любого значения. Значение по умолчанию — minvalue для возрастающих последовательностей и maxvalue для убывающих. |
TEMPORARY или TEMP
| Если указано, объект последовательности создаётся только для этого сеанса и автоматически удаляется при завершении сеанса. Существующие постоянные последовательности с тем же именем не видны (в этом сеансе) пока существует временная последовательность, если они не ссылаются с указанием схемы. |
Последовательности основаны на
BIGINTарифметике, поэтому диапазон не может превышать диапазон восьмибайтового целого числа (-9223372036854775808 до 9223372036854775807).
© Copyright 2018–2024 Stichting DuckDB Foundation
Licensed under the MIT License.
https://duckdb.org/docs/sql/statements/create_sequence.html