Содержание
GENERATOR\SEQUENCE
Что такое генератор?
Думайте о генераторе, как о «потокобезопасном» («thread-safe») целочисленном счетчике, который расположен внутри базы данных Firebird. Вы можете создать его, задав имя:
CREATE GENERATOR GenTest;
Затем вы можете получать его текущее значение, увеличивать его или уменьшать точно так же, как и переменную «var i: integer» в Delphi, однако не всегда можно просто установить определенное значение, а затем получить то же самое значение, как вы ожидаете, - генератор находится внутри базы данных, но вне механизма управления транзакциями.
Что такое последовательность (sequence)?
«Последовательность» («sequence») - это официальный термин SQL для обозначения того, что в СУБД Firebird называется генератором. Поскольку СУБД Firebird постоянно стремиться к большему соответствию стандарту SQL, то в СУБД Firebird 2 и более поздних версиях ключевое слово SEQUENCE может быть использован как синоним GENERATOR. Фактически, рекомендуется использовать синтаксис SEQUENCE во вновь создаваемом коде.
Хотя слово «последовательность» подразумевает серию генерируемых значений, в то время как «генератор» подразумевает прямую ссылку на фабрику по производству значений, в СУБД Firebird нет никаких различий между генератором и последовательностью. Просто это два названия для одного и того же объекта базы данных. Вы можете создавать генератор и получать доступ к нему с помощью синтаксиса последовательности, и наоборот.
Вот предпочтительный синтаксис для создания генератора/последовательности в СУБД Firebird 2:
CREATE SEQUENCE SeqTest;
Где хранятся генераторы?
Декларации генераторов хранятся в системной таблице RDB$GENERATORS. Однако, их значения хранятся на специальных зарезервированных страницах внутри базы данных. Вы никогда не получите доступ к этим значениям напрямую. Вы можете получить к ним доступ с помощью специальных встроенных функций, которые будут обсуждаться далее в этом руководстве.
Описание
Генератор (generator), или последовательность (sequence) — это самый простой объект базы данных. Он позволяет хранить целые числа в очень широком диапазоне значений от –9,223,372,036,854,775,808 до +9,223,372,036,854,775,807. Под него отводится 8 байтов памяти. Это подходящее средство для формирования значений искусственных первичных ключей. Для каждого искусственного первичного ключа любой таблицы базы данных пользователем создается свой собственный генератор, с которым выполняются все действия по формированию значений этого первичного ключа.
Важной особенностью генераторов является то, что работа с ними выполняется вне контекста какой-либо транзакции. Это означает, что при одновременном обращении к одному и тому же генератору разных конкурирующих транзакций никогда не возникнет конфликта блокировки, и каждый параллельный процесс получит уникальное новое числовое значение. Значение зависит от времени обращения к генератору. В принципе, генераторы могут использоваться и для получения последовательностей неповторяющихся целых чисел для любых других целей.
Обсуждение