double arrow

Триггеры и их назначение


Триггер – это отдельная хранимая в базе подпрограмма, связанная с таблицей или обзором, которая автоматически включается, когда в таб­лицу или обзор вставляется (триггер добавления), модифицируется (триг­гер модификации) или удаляется (триггер удаления) строка.

Триггер никогда не вызывается непосредственно. Он выполнятся всякий раз, когда приложение или пользователь пытаются вставлять, мо­дифицировать или удалять строку в таблице. Другими словами триггер жестко связан с данными и выполняется тогда и только тогда, когда дела­ется попытка изменить данные.

Триггеры могут использовать исключения (генерируемые сообщения об ошибках). Когда в триггере создается исключение, его работа заверша­ется, отменяются все сделанные в триггере изменения и генерируется сообщение об ошибке, если не предусмотрена специальная обработка возникших ошибок (см. конструкцию WHEN).

Триггеры позволяют:

  • Контролировать входные данные, обеспечивая повышение досто­верности информации и ее логическую непротиворечивость.
  • Повысить независимость прикладного программного обеспечения. Изменение схемы контроля в триггере автоматически отражается во всех приложениях, не требуя ни внесения в них каких-либо из­менений, ни их перетрансляции.
  • Обеспечить автоматическую регистрацию изменений в таблицах. Приложение может хранить полный протокол изменений, исполь­зуя триггеры, которые включаются при каждом изменении таблицы.
  • Выполнять синхронные изменения в нескольких таблицах, обес­печивая как логическую целостность данных, так и автоматиче­ское поддержание соответствия первичных и агрегированных дан­ных.
  • Автоматически уведомлять об изменениях в базе данных, исполь­зуя события, создаваемые триггерами.

Триггеры создаются командой CREATE TRIGGER, модифицируются командой ALTER TRIGGER и удаляются командой DROP TRIGGER.

Триггер состоит из заголовка и тела.

Заголовок содержит:

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

Тело триггера содержит:

  • Необязательный список локальных переменных с указанием их типов.
  • Программный блок на языке процедур и триггеров INTERBASE (набор инструкций в операторных скобках BEGIN и END). Про­граммный блок выполняется при включении триггера. Блок может включать в себя другие блоки, так что программа, реализующая триггер может быть сколь угодно сложной. Описание SQL для хранимых процедур и триггеров приведено ниже.

Триггер никогда не вызывается непосредственно. Наоборот, когда приложение или пользователь пытаются выполнить инструкцию INSERT, UPDATE или DELETE над строкой в таблице, любые триггеры связанные с этой таблицей и операцией автоматически выполняются, or fier. Триггер, определенный для UPDATE на не модифицируемых видах fire, даже если никакая модификация не происходит.

Важно: Так как каждая инструкция в теле сохраненной процедуры должна завершатся точкой с запятой, вы должны определить отличный символ для завершения инструкции CREATE TRIGGER в ISQL. Используйте SET TERM перед CREATE PROCEDURE, чтобы определить терминатор отличный от точки с запятой. После инструкции CREATE TRIGGER, включите SET TERM, что бы изменить терминатор обратно к точке с запятой.

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

Триггеры могут быть наделены привилегиями на таблицу, точно так же, как пользователи или процедуры могут быть наделены привилегиями. Используйте инструкцию GRANT, но вместо использования TO username, используйте TO TRIGGER trigger_name. Привилегии триггеров могут быть отменены аналогичным использованием REVOKE.

Когда пользователь выполняет действия, которые fires триггер, триггер будет иметь привилегии на выполнение этих действий, если одно из следующих условий истино:

  • Триггер имеет привилегии для этого действия.
  • Пользователь имеет привилегии для этого действия.

Сейчас читают про: