FirebirdSQL logo
 FILTEREXCEPTION 

Последовательность (sequence) или генератор (generator) — объект базы данных, предназначенный для получения уникального числового значения.Термин последовательность является SQL совместимым.Ранее в Interbase и Firebird последовательности называли генераторами.

Независимо от диалекта базы данных последовательности (или генераторы) всегда хранятся как 64-битные целые значения.

Caution

Если клиент использует 1 диалект, то сервер передаёт ему значения последовательности, усечённые до 32-битного значения.Если значение последовательности передаются в 32-разрядное поле или переменную, то до тех пор, пока текущее значение последовательности не вышло за границы для 32-битного числа, ошибок не будет.В момент выхода значения последовательности за этот диапазон база данных 3-го диалекта выдаст сообщение об ошибке, а база данных 1-ого диалекта будет молча обрезать значения, что также может привести к ошибке — например, если поле, заполняемое генератором, является первичным или уникальным.

В данном разделе описываются вопросы создания, модификации (установка значения последовательности) и удаления последовательностей.

CREATE SEQUENCE

Назначение

Создание новой последовательности (генератора).

Доступно в

DSQL, ESQL

Синтаксис
CREATE {SEQUENCE | GENERATOR} seq_name
[START WITH start_value] [INCREMENT [BY] increment]
Table 1. Параметры оператора CREATE SEQUENCE
Параметр Описание

seq_name

Имя последовательности (генератора). Может содержать до 63 символов.

start_value

Начальное значение последовательности (генератора).По умолчанию равно 1.

increment

Шаг приращения.4 байтовое целое число.По умолчанию равно 1.

Оператор CREATE SEQUENCE создаёт новую последовательность.Слова SEQUENCE и GENERATOR являются синонимами.Вы можете использовать любое из них, но рекомендуется использовать SEQUENCE.

В момент создания последовательности ей устанавливается значение, указанное в необязательном предложении START WITH минус значение приращения указанное в предложении INCREMENT [BY].Если предложение STARTING WITH отсутствует, то последовательности устанавливается значение равное 1.Таким образом, если начальное значение последовательности равно 100, а приращение 10, то первое значение выданное оператором NEXT VALUE FOR будет равно 100.

Note

До Firebird 4.0, первое значение выданное оператором NEXT VALUE FOR было равно 110.

Необязательное предложение INCREMENT [BY] позволяет задать шаг приращения для оператора NEXT VALUES FOR.По умолчанию шаг приращения равен единице.Приращение не может быть установлено в ноль для пользовательских последовательностей.Значение последовательности изменяется также при обращении к функции GEN_ID, где в качестве параметра указывается имя последовательности и значение приращения, которое может быть отлично от указанного в предложении INCREMENT BY.

docnext count = 15

Кто может создать последовательность?

Выполнить оператор CREATE SEQUENCE (CREATE GENERATOR) могут:

Пользователь, создавший последовательность, становится её владельцем.

Примеры

Example 1. Создание последовательности

Создание последовательности EMP_NO_GEN с начальным значением 0 и шагом приращения равным единице.

CREATE SEQUENCE EMP_NO_GEN;
Example 2. Создание последовательности

Создание последовательности EMP_NO_GEN с начальным значением 5 и шагом приращения равным единице.

CREATE SEQUENCE EMP_NO_GEN START WITH 5;
Example 3. Создание последовательности

Создание последовательности EMP_NO_GEN с начальным значением 1 и шагом приращения равным 10.

CREATE SEQUENCE EMP_NO_GEN INCREMENT BY 10;
Example 4. Создание последовательности

Создание последовательности EMP_NO_GEN с начальным значением 5 и шагом приращения равным 10.

CREATE SEQUENCE EMP_NO_GEN START WITH 5 INCREMENT BY 10;

ALTER SEQUENCE

Назначение

Изменение последовательности (генератора).

Доступно в

DSQL, ESQL

Синтаксис
ALTER {SEQUENCE | GENERATOR} seq_name
[RESTART [WITH newvalue]]
[INCREMENT [BY] increment]
Table 1. Параметры оператора ALTER SEQUENCE
Параметр Описание

seq_name

Имя последовательности (генератора).

newvalue

Новое значение последовательности (генератора). 64 битное целое в диапазоне от -263 до 263 - 1

increment

Шаг приращения. Не может быть равным 0.

Оператор ALTER SEQUENCE устанавливает значение последовательности или генератора в заданное значение и/или изменяет значение приращения.

Предложение RESTART WITH позволяет установить значение последовательности. Предложение RESTART может быть использовано самостоятельно (без WITH) для перезапуска значения последовательности с того значения с которого был начат старт генерации значений или предыдущий рестарт.

Warning

Неосторожное использование оператора ALTER SEQUENCE (изменение значения последовательности или генератора) может привести к нарушению логической целостности данных.

Предложение INCREMENT [BY] позволяет изменить шаг приращения последовательности для оператора NEXT VALUES FOR.

Note

Изменение значения приращения — это возможность, которая вступает в силу для каждого запроса, который запускается после фиксаций изменения.Процедуры, которые вызваны впервые после изменения приращения, будут использовать новое значение, если они будут содержать операторы NEXT VALUE FOR.Процедуры, которые уже работают, не будут затронуты, потому что они кэшируются.Процедуры, использующие NEXT VALUE FOR, не должны быть перекомпилированы, чтобы видеть новое приращение, но если они уже работают или загружены, то никакого эффекта не будет.Конечно процедуры, использующие gen_id(gen, <expression>), не затронут при изменении приращения.

Кто может изменить последовательность?

Выполнить оператор ALTER SEQUENCE (ALTER GENERATOR) могут:

  • Администраторы

  • Владелец последовательности (генератора);

  • Пользователи с привилегией ALTER ANY SEQUENCE (ALTER ANY GENERATOR).

Примеры

Example 1. Изменение последовательности

Установка для последовательности EMP_NO_GEN значения 145.

ALTER SEQUENCE EMP_NO_GEN RESTART WITH 145;
Example 2. Изменение последовательности

Сброс значения последовательности в то, которое было установлено при создании последовательности (или при предыдущей установке значения).

ALTER SEQUENCE EMP_NO_GEN RESTART;
Example 3. Изменение последовательности

Изменение значения приращения последовательности EMP_NO_GEN.

ALTER SEQUENCE EMP_NO_GEN INCREMENT BY 10;

CREATE OR ALTER SEQUENCE

Назначение

Создание новой или изменение существующей последовательности (генератора).

Доступно в

DSQL, ESQL

Синтаксис
CREATE OR ALTER {SEQUENCE | GENERATOR} seq_name
[{START WITH start_value | RESTART}]
[INCREMENT [BY] increment]
Table 1. Параметры оператора CREATE OR ALTER SEQUENCE
Параметр Описание

seq_name

Имя последовательности (генератора). Может содержать до 63 символов.

start_value

Начальное значение последовательности (генератора).По умолчанию равно 1.

increment

Шаг приращения.4 байтное целое число.По умолчанию равно 1.

Если последовательности не существует, то она будет создана.Уже существующая последовательность будет изменена, при этом существующие зависимости последовательности будут сохранены.

Important

Оператор CREATE OR ALTER SEQUENCE требует, чтобы хотя бы одно из необязательных предложений было указано.

Примеры

Example 1. Создание новой или изменение существующей последовательности
CREATE OR ALTER SEQUENCE EMP_NO_GEN
START WITH 10
INCREMENT BY 1;

DROP SEQUENCE

Назначение

Удаление последовательности (генератора).

Доступно в

DSQL, ESQL

Синтаксис
DROP {SEQUENCE | GENERATOR} seq_name
Table 1. Параметры оператора DROP SEQUENCE
Параметр Описание

seq_name

Имя последовательности (генератора).

Оператор DROP SEQUENCE удаляет существующую последовательность (генератор). Слова SEQUENCE и GENERATOR являются синонимами.Вы можете использовать любое из них, но рекомендуется использовать SEQUENCE.При наличии зависимостей для существующей последовательности (генератора) удаления не будет выполнено.

Кто может удалить генератор?

Выполнить оператор DROP SEQUENCE (DROP GENERATOR) могут:

  • Администраторы

  • Владелец последовательности (генератора);

  • Пользователи с привилегией DROP ANY SEQUENCE (DROP ANY GENERATOR).

Примеры

Example 1. Удаление последовательности
DROP SEQUENCE EMP_NO_GEN;

RECREATE SEQUENCE

Назначение

Создание или пересоздание последовательности (генератора).

Доступно в

DSQL, ESQL

Синтаксис
RECREATE {SEQUENCE | GENERATOR} seq_name
  [START WITH start_value]
  [INCREMENT [BY] increment];
Table 1. Параметры оператора RECREATE SEQUENCE
Параметр Описание

seq_name

Имя последовательности (генератора). Может содержать до 63 символов.

start_value

Начальное значение последовательности (генератора).

increment

Шаг приращения.4 байтное целое число.

Оператор RECREATE SEQUENCE создаёт или пересоздаёт последовательность (генератор). Если последовательность с таким именем уже существует,то оператор RECREATE SEQUENCE попытается удалить её и создать новую последовательность.При наличии зависимостей для существующей последовательности оператор RECREATE SEQUENCE не выполнится.

Примеры

Example 1. Пересоздание последовательности
RECREATE SEQUENCE EMP_NO_GEN
START WITH 10
INCREMENT BY 1;

SET GENERATOR

Назначение

Устанавливает значение последовательности или генератора в заданное значение.

Доступно в

DSQL, ESQL

Синтаксис
SET GENERATOR seq_name TO new_val
Table 1. Параметры оператора SET GENERATOR
Параметр Описание

seq_name

Имя последовательности (генератора).

new_val

Новое значение последовательности (генератора). 64 битное целое в диапазоне от -263 .. 263 - 1

Оператор SET GENERATOR устанавливает значение последовательности или генератора в заданное значение.

Note

Оператор SET GENERATOR считается устаревшим и оставлен ради обратной совместимости.В настоящее время вместо него рекомендуется использовать стандарт-совместимый оператор ALTER SEQUENCE.

Неосторожное использование оператора SET GENERATOR (изменение значения последовательности или генератора) может привести к потере логической целостности данных.

Кто может изменить значение генератора?

Выполнить оператор SET GENERATOR могут:

  • Администраторы

  • Владелец последовательности (генератора);

  • Пользователи с привилегией ALTER ANY SEQUENCE (ALTER ANY GENERATOR).

Примеры

Example 1. Установка значения для последовательности
SET GENERATOR EMP_NO_GEN TO 145;
Note

То же самое можно сделать, используя оператор ALTER SEQUENCE

ALTER SEQUENCE EMP_NO_GEN RESTART WITH 145;
См. также:

ALTER SEQUENCE, NEXT VALUE FOR, GEN_ID.