Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РЭУБД лекции.doc
Скачиваний:
25
Добавлен:
27.08.2019
Размер:
399.36 Кб
Скачать

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

Структурная схема терминов

Понятие триггера

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

Триггер, по сути, похож на обработчики событий BeforeEdit, AfterEdit, BeforeInsert, AfterInsert, BeforeDelete и AfterDelete, связанные с модификацией таблиц. Триггер может вызываться при редактировании, добавлении или удалении записей до и (или) после этих событий.

Изменения, внесенные триггером в отмененные транзакции, также отменяются.

Триггеры обычно используются для программной реализации так называемых бизнес-правил. С их помощью удобно реализовывать ограничения на значения столбцов, ограничения ссылочной целостности, а также выполнять накапливание статистики работы с БД, резервное копирование и т.п.

Устанавливаемые триггером бизнес-правила не должны противоречить аналогичным правилам, заданным для БД на физическом уровне.

Команды создания, изменения и удаления триггера

Создание и изменение триггера

Создание триггера выполняется оператором следующего формата:

CREATE TRIGGER <Имя триггера> FOR <Имя таблицы>

[ACTIVE | INACTIVE]

{BEFORE | AFTER}

{UPDATE | INSERT | DELETE}

[POSITION <число>]

AS <Тело триггера>

Описатель

Назначение

ACTIVE

Триггер активен сразу после его создания

INACTIVE

Триггер неактивен сразу после его создания

BEFORE

Триггер выполняется до наступления события

AFTER

Триггер выполняется после наступления события

UPDATE | INSERT | DELETE

Определяют событие, для которого вызывается триггер

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

Изменение триггера

ALTER TRIGGER <Имя триггера> For <Имя таблицы>

[ACTIVE | INACTIVE]

{BEFORE | AFTER}

{UPDATE | INSERT | DELETE}

[POSITION <число>]

AS <Тело триггера>

В целом, формат оператора такой же, как и при создании триггера. После выполнения оператора старое описание заменяется на новое.

Удаление триггера

Производится оператором:

DROP TRIGGER <имя триггера>

Программирование триггера аналогично программированию хранимой процедуры. Для доступа к значениям столбца используются конструкции формата:

OLD.<Имя столбца>

NEW.<Имя столбца>

Генераторы - назначение, создание, установка начального значения

Создание генератора

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

Создается генератор с помощью языка SQL-сервера:

CREATE GENERATOR <Имя генератора>;

Начальное значение задается командой:

SET GENERATOR <Имя генератора> TO <Начальное значение>

Пример

/* Создание таблицы */

CREATE TABLE Store

(S_Code INTEGER NOT NULL,

...

PRIMARY KEY(S_Code));

/* Создание генератора */

CREATE GENERATOR GenStore;

SET GENERATOR GenStore TO 1;

/* Создание триггера */

CREATE TRIGGER CodeStore FOR Store

ACTIVE

BEFORE INSERT

AS

BEGIN

NEW.S_Code = GEN_ID(GenStore,1);

END