Определение
SQL trigger — это набор SQL-выражений, которые автоматически выполняются в ответ на указанное событие в таблице, такое как INSERT, UPDATE или DELETE.
Типы триггеров
- BEFORE trigger — выполняется перед тем, как произойдёт событие, полезен для валидации или изменения данных перед внесением изменений
- AFTER trigger — выполняется после завершения события, обычно используется для логирования или каскадных обновлений
- INSTEAD OF trigger — заменяет само событие, вызвавшее триггер, часто используется с представлениями, которые нельзя напрямую изменять
Основные сценарии использования
- Валидация данных — выполнение бизнес-правил перед фиксацией изменений
- Логирование операций — автоматическая запись того, кто, что и когда изменил
- Поддержание консистентности — синхронизация связанных таблиц или производных значений в автоматическом режиме
Пример
CREATE TRIGGER log_update
AFTER UPDATE ON employees
FOR EACH ROW
INSERT INTO audit_log (changed_at, employee_id)
VALUES (NOW(), OLD.id);
Важные аспекты
- Триггеры выполняются неявно, то есть они срабатывают без прямого вызова
- Чрезмерное использование может затруднить отладку и снизить производительность
- Не все СУБД поддерживают одинаковые типы триггеров —
INSTEAD OF доступен в SQL Server и Oracle, но не в MySQL