Триггер (trigger) представляет собой процедуру особого типа, которая вызывается автоматически при модификации записей БД, т. е. при изменении значений столбцов или при их удалении и добавлении. Фактически триггеры являются разновидностью хранимых процедур, но пользователю они не доступны, а доступны только БД.
Запуск триггера обусловлен наступлением определенного события (действия) — по сути, добавления INSERT или удаления DELETE строки в заданной таблице, а так же при модификации UPDATE данных в определенном столбце заданной таблицы БД.
Момент запуска триггера определяется с помощью ключевых слов BEFORE, когда триггер запускается до выполнения связанного с ним события, например, до добавления записи, или AFTER, когда триггер запускается до выполнения связанного с ним события. В случае, если триггер вызывается до наступления события, он может внести изменения в модифицируемую событием запись, конечно, при условии, что событие — не удаление записи.
Триггеры обычно используются для поддержки ссылочной целостности, каскадного изменения или удаления данных, архивирования удаленных или измененных данных, отслеживания изменений или вызова пользовательских или системных хранимых процедур и программной реализации, так называемых бизнес-правил.
Триггер – поименованный объект БД, который ассоциирован с таблицей и активируется при наступлении определенного события, связанного с этой таблицей. Триггер запускается сервером БД автоматически при попытке изменения данных в таблице, с которой он связан. Все производимые им модификации данных рассматриваются как выполняемые в транзакции, в которой выполнено действие, вызвавшее срабатывание триггера. Соответственно, в случае обнаружения ошибки или нарушения целостности данных может произойти откат этой транзакции.
Создание триггера подобно для многих СУБД. Покажем это на примере СУБД InterBase:
CREATE TRIGGER <Имя триггера> FOR <Имя таблицы>
[active | inactive]
{before | after}
{update | insert | delete}
[position <Число>]
AS <Тело триггера>
Описатели active и inactive определяет активность триггера стразу после его создания. По умолчанию действует active.
Описатели before и after задают момент начала выполнения триггера.
Описатели update, insert и delete определяют момент (событие) выполнения триггера.
При наличии нескольких триггеров для одного события определяют порядок вызова триггеров, который указывается в операнде position.
Триггер можно удалить оператором DROP TRIGGER <Имя триггера>
Изменяется триггер оператором ALTER TRIGGER <Имя триггера>
Программирование триггера ничем не отличается от программирования хранимых процедур. Например:
CREATE TRIGGER Table_example_bi FOR Nakls
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (NPrice IS NULL) then
NPrice = 0.0;