Ответ
Триггер — это хранимая процедура в базе данных, которая автоматически выполняется в ответ на определённые события, связанные с таблицей. Этими событиями обычно являются операции модификации данных: 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;Важные риски:
- Скрытая логика: Триггеры делают логику работы с данными неявной. Разработчик может не догадываться об их существовании, что усложняет отладку.
- Производительность: Неправильно написанный триггер может серьезно замедлить операции записи в базу данных.
- Сложность: Каскадные триггеры (когда один триггер вызывает другой) могут привести к непредсказуемому поведению и сложным для отладки цепочкам вызовов.