- Trigger
-
Три́ггер (англ. trigger) — это хранимая процедура особого типа, которую пользователь не вызывает непосредственно, а исполнение которой обусловлено наступлением определенного события (действием) — по сути добавлением
INSERT
или удалениемDELETE
строки в заданной таблице, или модификацииUPDATE
данных в определенном столбце заданной таблицы реляционной базы данных. Триггеры применяются для обеспечения целостности данных и реализации сложной бизнес-логики. Триггер запускается сервером автоматически при попытке изменения данных в таблице, с которой он связан. Все производимые им модификации данных рассматриваются как выполняемые в транзакции, в которой выполнено действие, вызвавшее срабатывание триггера. Соответственно, в случае обнаружения ошибки или нарушения целостности данных может произойти откат этой транзакции.Момент запуска триггера определяется с помощью ключевых слов
BEFORE
(триггер запускается до выполнения связанного с ним события; например, до добавления записи) илиAFTER
(после события). В случае, если триггер вызывается до события, он может внести изменения в модифицируемую событием запись (конечно, при условии, что событие — не удаление записи). Некоторые СУБД накладывают ограничения на операторы, которые могут быть использованы в триггере (например, может быть запрещено вносить изменения в таблицу, на которой «висит» триггер, и т. п.)Кроме того, триггеры могут быть привязаны не к таблице, а к представлению (VIEW). В этом случае с их помощью реализуется механизм «обновляемого представления». В этом случае ключевые слова
BEFORE
иAFTER
влияют лишь на последовательность вызова триггеров, так как собственно событие (удаление, вставка или обновление) не происходит.В некоторых серверах триггеры могут вызываться не для каждой модифицируемой записи, а один раз на изменение таблицы. Такие триггеры называются табличными.
Пример (Oracle):
/* Триггер на уровне таблицы */ CREATE OR REPLACE TRIGGER tr2 AFTER UPDATE ON rayon BEGIN INSERT INTO info VALUES ('table "rayon" has changed'); END;
В этом случае для отличия табличных триггеров от строчных вводится дополнительные ключевые слова при описании строчных триггеров. В Oracle это словосочетание FOR EACH ROW.
Пример:
/* Триггер на уровне строки */ CREATE OR REPLACE TRIGGER tr1 AFTER UPDATE ON rayon FOR EACH ROW BEGIN INSERT INTO info VALUES ('one string in table "rayon" has changed'); END;
Wikimedia Foundation. 2010.