Инструменты пользователя

Инструменты сайта


sequence



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 байтов памяти. Это подходящее средство для формирования значений искусственных первичных ключей. Для каждого искусственного первичного ключа любой таблицы базы данных пользователем создается свой собственный генератор, с которым выполняются все действия по формированию значений этого первичного ключа.

Важной особенностью генераторов является то, что работа с ними выполняется вне контекста какой-либо транзакции. Это означает, что при одновременном обращении к одному и тому же генератору разных конкурирующих транзакций никогда не возникнет конфликта блокировки, и каждый параллельный процесс получит уникальное новое числовое значение. Значение зависит от времени обращения к генератору. В принципе, генераторы могут использоваться и для получения последовательностей неповторяющихся целых чисел для любых других целей.

См. также

Источник

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
M Q Y D P
 
sequence.txt · Последнее изменение: 2009/05/04 18:32 (внешнее изменение)