Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

Использование последовательностей

Последовательность — это генератор упорядоченных целочисленных значений.

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

При создании новой последовательности можно также задать несколько параметров. Эти параметры определяют значения, которые генерируются при каждом использовании последовательности.

Параметры box.schema.sequence.create

Имя параметра

Тип и описание

Значение по умолчанию

Примеры

start

Целое число. Значение, генерируемое при первом использовании последовательности

1

start=0

min

Целое число. Значения меньше этого не могут быть сгенерированы

1

min=-1000

max

Целое число. Значения больше этого не могут быть сгенерированы

9223372036854775807

max=0

cycle

Логическое значение. Определяет, начинать ли заново, когда новые значения не могут быть сгенерированы

false

cycle=true

cache

Целое число. Количество значений для хранения в кэше

0

cache=0

step

Целое число. Значение, добавляемое к ранее сгенерированному значению при генерации нового

1

step=-1

if_not_exists

Логическое значение. Если true и последовательность с таким именем уже существует, остальные параметры игнорируются и используются существующие значения

false

if_not_exists=true

После создания последовательность можно изменять, удалять, сбрасывать, принудительно генерировать следующее значение или связывать с индексом.

Связывание последовательности с индексом

Сначала создадим последовательность:

-- Create a sequence --box.schema.sequence.create('id_seq',{min=1000, start=1000})--[[---- step: 1  id: 1  min: 1000  cache: 0  uid: 1  cycle: false  name: id_seq  start: 1000  max: 9223372036854775807...--]]

В результате видно, что новая последовательность имеет все значения по умолчанию, кроме двух указанных: min и start.

Получить следующее значение из последовательности можно вызовом функции next():

-- Get the next item --box.sequence.id_seq:next()--[[---- 1000...--]]

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

Создадим спейс и укажем, что его первичный ключ должен генерироваться из последовательности:

-- Create a space --box.schema.space.create('customers')-- Create an index that uses the sequence --box.space.customers:create_index('primary',{ sequence = 'id_seq' })--[[---- parts:  - type: unsigned    is_nullable: false    fieldno: 1  sequence_id: 1  id: 0  space_id: 513  unique: true  hint: true  type: TREE  name: primary  sequence_fieldno: 1...--]]

Вставим кортеж без указания значения первичного ключа:

-- Insert a tuple without the primary key value --box.space.customers:insert{ nil, 'Adams' }--[[---- [1001, 'Adams']...--]]

Результат — новый кортеж, в котором первое поле получает следующее значение из последовательности. Такой механизм, при котором система автоматически генерирует значения для первичного ключа, иногда называют «автоинкрементом» (auto-incrementing) или «идентификационным» (identity).

Подробнее о синтаксисе и реализации см. в справочнике: box.schema.sequence.