Генераторы

Генераторы

Генераторы являются идеальным средством для создания значений автоинкрементных уникальных ключей или серий значений числового столбца, а также других серий. Генераторы в базе данных объявляются оператором CREATE, как и любой другой объект базы данных:

CREATE GENERATOR AGenerator;

Генераторам может быть присвоено любое начальное значение:

SET GENERATOR AGenerator ТО 1;

! ! !

ВНИМАНИЕ! Существуют строгие предупреждения по поводу переустановки значений генераторов, когда эти значения находятся в использовании - см. разд. "Предупреждения о переустановке значений генераторов" в этой главе.

. ! .

Получение следующего значения

Для получения следующего значения вызывайте функцию SQL GEN_ID(ИмяГенератора, n), где имягенератора - имя генератора, а n - целое (диалект 1) или NUMERIC(18,0) (диалект 3), определяющее значение шага. Запрос:

SELECT GEN_ID(AGenerator, 2) from RDB$DATABASE;

возвращает число, которое на 2 больше последнего сгенерированного числа, и устанавливает значение генератора в сгенерированное значение.

Текущее значение генератора

Следующая строка:

SELECT GEN_ID(AGenerator, 0) from RDB$DATABASE;

возвращает текущее значение генератора без его увеличения[18].

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

. . .

DECLARE VARIABLE MyVar BIGINT;

. . .

MyVar = GEN_ID(AGenerator, 1);

Более подробную информацию об использовании генераторов в модулях PSQL - в особенности в триггерах - см. в главе 29[19].

Использование отрицательного шага

Аргумент шаг в GEN_ID может быть отрицательным. Следовательно, можно устанавливать или переустанавливать текущее значение генератора, передавая отрицательный аргумент или в виде целой константы, или в виде целого выражения. Эта возможность иногда используется как "трюк" для установки значений генератора в PSQL, поскольку в PSQL не могут использоваться такие команды DDL, как SET GENERATOR.

Например, оператор:

SELECT GEN_ID (AGenerator, -GEN_ID (AGenerator, 0)) from RDB$DATABASE;

устанавливает значение генератора в ноль.

Предупреждения о переустановке значений генераторов

Основное простое правило по переустановке значений генераторов в работающей базе данных - будь то в SQL, PSQL или в некотором интерфейсе администратора - не делать этого.

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

Оставьте переустановку значений генераторов в создаваемой базе данных для редких случаев, когда это требуется условиями проектирования. Например, некоторые бухгалтерские системы, написанные в старом стиле, передают журналы в таблицы истории с новым первичным ключом, очищают таблицу журналов и устанавливают последовательность первичных ключей в ноль в организациях с несколькими филиалами, выделяя диапазоны значений ключа каждого филиала в отдельный "фрагмент", чтобы гарантировать целостность ключей при репликации.

Никогда не переустанавливайте значения генератора в попытке скорректировать программные ошибки, ошибки ввода данных или для "устранения промежутков" в последовательности значений[20].

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

Онлайн-генераторы

Из книги автора

Онлайн-генераторы www.csssprites.com. Обладает довольно минималистичным дизайном, есть возможность загружать несколько исходных файлов.www.printf.ru/spritr/. В этом инструменте есть возможность загружать несколько файлов, очень милый дизайн, но в целом настроек мало.spritegen.website-performance.org.


9.2. Генераторы паролей

Из книги автора

9.2. Генераторы паролей Генераторы паролей используются для создания особо сложных и длинных паролей. Генераторов паролей – несчетное множество. Каждый школьник, обладая начальными навыками программирования, может создать программу, генерирующую случайную


Генераторы - лучшие друзья первичных ключей

Из книги автора

Генераторы - лучшие друзья первичных ключей Надо сказать несколько слов о реализации первичного ключа. Так как он предназначен для обеспечения уникальности, то никакие две записи в одной таблице не могут иметь одинаковых значений этого ключа. То есть, чтобы


Генераторы текстур

Из книги автора

Генераторы текстур В состав Filters Unlimites входит несколько генераторов текстур. Подобные эффекты больше всего пригодятся разработчикам трехмерных игр и других 3D-проектов.При помощи фильтров категории Paper Backgrounds (Фон бумаги) можно создать текстуру поверхности любого типа


15.3. Генераторы специализированного кода

Из книги автора

15.3. Генераторы специализированного кода Unix имеет давнюю традицию поддержки инструментов, которые специально предназначены для генерации кода для различных специальных целей. Давними "монументами" данной традиции, которые "уходят корнями" в Version 7 и ранние дни Unix, а также


15.3. Генераторы специализированного кода

Из книги автора

15.3. Генераторы специализированного кода Unix имеет давнюю традицию поддержки инструментов, которые специально предназначены для генерации кода для различных специальных целей. Давними "монументами" данной традиции, которые "уходят корнями" в Version 7 и ранние дни Unix, а также


Генераторы перестановок (Permutation generators)

Из книги автора

Генераторы перестановок (Permutation generators) template ‹class BidirectionalIterator›bool next_permutation(BidirectionalIterator first, BidirectionalIterator last);template ‹class BidirectionalIterator, class Compare›bool next_permutation(BidirectionalIterator first, BidirectionalIterator last, Compare comp);next_permutation берёт последовательность, определённую диапазоном [first, last), и


Аддитивные генераторы

Из книги автора

Аддитивные генераторы Второй стандартный метод получения "более случайных" чисел от простого генератора называется аддитивным.В соответствии с этим методом, мы инициализируем массив чисел с плавающей запятой с помощью простого генератора, например, минимального


Тасующие генераторы

Из книги автора

Тасующие генераторы И последний тип рассматриваемых нами генераторов, позволяющих получать "более случайные" числа, принадлежит к алгоритмам тасования. Здесь мы опишем генератор, реализованный на основе одного внутреннего генератора, хотя существуют и другие