Использование последовательностей
Последовательность — это генератор упорядоченных целочисленных значений.
Как и в случае со спейсами и индексами, следует указать имя последовательности, а генерацию уникального числового идентификатора (ID последовательности) предоставить Tarantool.
При создании новой последовательности можно также задать несколько параметров. Эти параметры определяют значения, которые генерируются при каждом использовании последовательности.
Имя параметра | Тип и описание | Значение по умолчанию | Примеры |
|---|---|---|---|
| Целое число. Значение, генерируемое при первом использовании последовательности | 1 |
|
| Целое число. Значения меньше этого не могут быть сгенерированы | 1 |
|
| Целое число. Значения больше этого не могут быть сгенерированы | 9223372036854775807 |
|
| Логическое значение. Определяет, начинать ли заново, когда новые значения не могут быть сгенерированы | false |
|
| Целое число. Количество значений для хранения в кэше | 0 |
|
| Целое число. Значение, добавляемое к ранее сгенерированному значению при генерации нового | 1 |
|
| Логическое значение. Если true и последовательность с таким именем уже существует, остальные параметры игнорируются и используются существующие значения |
|
|
После создания последовательность можно изменять, удалять, сбрасывать, принудительно генерировать следующее значение или связывать с индексом.
Сначала создадим последовательность:
-- Create a sequence --box.schema.sequence.create('id_seq',{min=1000, start=1000})--[[---- step: 1id: 1min: 1000cache: 0uid: 1cycle: falsename: id_seqstart: 1000max: 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: unsignedis_nullable: falsefieldno: 1sequence_id: 1id: 0space_id: 513unique: truehint: truetype: TREEname: primarysequence_fieldno: 1...--]]
Вставим кортеж без указания значения первичного ключа:
-- Insert a tuple without the primary key value --box.space.customers:insert{ nil, 'Adams' }--[[---- [1001, 'Adams']...--]]
Результат — новый кортеж, в котором первое поле получает следующее значение из последовательности. Такой механизм, при котором система автоматически генерирует значения для первичного ключа, иногда называют «автоинкрементом» (auto-incrementing) или «идентификационным» (identity).
Подробнее о синтаксисе и реализации см. в справочнике: box.schema.sequence.