Основы проектирования баз данных в САПР. Литовка Ю.В - 50 стр.

UptoLike

ния выходных параметров. Триггеры всегда используют действия. При откате транзакции отменя-
ются все изменения, внесенные в базу данных триггерами. События изменения таблиц базы вклю-
чают добавление новой записи, изменение существующей записи, удаление записи. Вызов тригге-
ров может выполняться до наступления события или после его наступления. Преимущество исполь-
зования триггеров состоит в следующем:
1) автоматическое обеспечение каскадных воздействий в дочерних таблицах, удаление записи в ро-
дительской таблице выполняется на сервере. Пользователь не заботится о каскадной реализации и од-
новременно не пересылает изменения на сервер;
2) изменения в триггерах не влекут необходимости изменения программного кода в клиентских
приложениях.
Формат оператора создания триггера выглядит следующим образом:
CREATE TRIGGER <имя триггера> FOR <имя таблицы>
[ACTIVE | INACTIVE]
{BEFORE | AFTER}
{DELETE | INSERT | UPDATE}
{POSITION <номер>}
AS <тело триггера>;
Структура тела триггера имеет вид
[<объявление локальных переменных>]
BEGIN
<оператор>
END;
где ACTIVE | INACTIVE указывает, активен триггер или нет. По умолчанию действует ACTIVE. Триг-
гер можно создать заранее и установить INACTIVE. В дальнейшем этот параметр можно переопреде-
лить на ACTIVE;
BEFORE | AFTER – выполнение триггера до или после запоминания изменений в базе данных;
DELETE | INSERT | UPDATE операция над таблицей при выполнении которой будет срабатывать
триггер;
POSITION <номер> указывает порядок выполнения, если применяется группа триггеров. Значение
номера должно находиться в диапазоне от 0 до 32767. Триггеры с меньшими номерами выполняются
раньше. В группе допускаются триггеры с одинаковыми характеристиками операции и времени вы-
зова.
К значениям столбцов в триггерах допускается применение двух операций: OLD и NEW. Значе-
ние OLD.имя_столбца позволяет обратиться к состоянию столбца до внесения изменений, а значе-
ние NEW.имя_столбца к состоянию после изменения. Если значение столбца не изменилось, то
OLD.имя_столбца равно NEW.имя_столбца. Например, нужно внести изменения в таблицу prihod,
если в записи таблицы detal изменилось значение столбца name_det:
CREATE TRIGGER ba_detal FOR detal
ACTIVE
BEFORE UPDATE
AS
BEGIN
IF (OLD.name_det <> NEW.name_det) THEN
UPDATE prihod
SET name_det = NEW.name_det
WHERE name_det = OLD.name_det
END
Ограничение ссылочной целостности таблиц по внешнему ключу приводит к блокировке изме-
нения и удаления записи в родительской таблице, если для нее есть дочерние записи в дочерней