Ответ
Триггер — это хранимая процедура в базе данных, которая автоматически выполняется в ответ на определённые события, связанные с таблицей. Этими событиями обычно являются операции модификации данных: INSERT
, UPDATE
или DELETE
.
Триггеры могут срабатывать до (BEFORE
) или после (AFTER
) выполнения события.
Основные сценарии использования:
-
Аудит и логирование: Автоматическая запись информации о том, кто, когда и какие данные изменил, в отдельную таблицу логов. Пример: при каждом обновлении зарплаты сотрудника сохранять старое значение, новое значение и имя пользователя, выполнившего операцию.
-
Поддержание целостности данных и сложная валидация: Реализация бизнес-правил, которые невозможно описать стандартными ограничениями (
CHECK
,FOREIGN KEY
). Пример: запретить удаление проекта, если у него еще есть активные задачи. -
Автоматическое вычисление производных данных: Обновление вычисляемых полей в других таблицах. Пример: при добавлении нового товара в заказ автоматически пересчитывать и обновлять поле
total_sum
в таблице заказов.
Пример (псевдокод SQL):
CREATE TRIGGER update_order_sum
AFTER INSERT ON order_items
FOR EACH ROW
BEGIN
UPDATE orders
SET total_sum = total_sum + NEW.price
WHERE id = NEW.order_id;
END;
Важные риски:
- Скрытая логика: Триггеры делают логику работы с данными неявной. Разработчик может не догадываться об их существовании, что усложняет отладку.
- Производительность: Неправильно написанный триггер может серьезно замедлить операции записи в базу данных.
- Сложность: Каскадные триггеры (когда один триггер вызывает другой) могут привести к непредсказуемому поведению и сложным для отладки цепочкам вызовов.