Триггер (базы данных)
Три́ггер (англ. 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;
Базы данных |
|
---|---|
Концепции | Модель данных • Реляционные базы данных • Реляционная модель данных • Реляционная алгебра • Нормальная форма • Ссылочная целостность • Реляционная СУБД • Распределённые СУБД • ACID |
Ключи | Первичный ключ • Внешний ключ • Суррогатный ключ • Суперключ • Возможный ключ |
Объекты | Триггер • Представление • Таблица • Курсор • Журнализация изменений • Транзакция • Индекс • Хранимая процедура • Секционирование |
SQL | SELECT • INSERT • UPDATE • MERGE • DELETE • JOIN • UNION • CREATE • ALTER • DROP • COMMIT • ROLLBACK |
Типы реализаций | Иерархическая • Сетевая • Реляционная • Объектно-ориентированная |
Реализации СУБД | DB2 • Firebird • PostgreSQL • MS SQL Server • MySQL • Oracle • SQLite |
Компоненты | Язык запросов • Оптимизатор запросов • План выполнения запроса • ODBC • JDBC |
cs:Trigger (databáze) de:Datenbanktrigger en:Database trigger es:Trigger (base de datos) fr:Déclencheur hu:Trigger (adatbázisok) it:Trigger (database) ja:データベーストリガ lv:Trigeris (DBPS) nl:Trigger no:Utløsere (database) pl:Wyzwalacz pt:Gatilho (banco de dados) sr:Trigeri tr:Trigger
Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....