Ответ
Триггеры — это хранимые процедуры, которые автоматически выполняются (срабатывают) при наступлении определённого события с таблицей: INSERT, UPDATE или DELETE.
Основные задачи триггеров:
-
Обеспечение сложной бизнес-логики и целостности данных на уровне БД.
-- Триггер для поддержки истории изменений цены товара CREATE TRIGGER log_price_change AFTER UPDATE ON products FOR EACH ROW BEGIN IF OLD.price <> NEW.price THEN INSERT INTO price_history (product_id, old_price, new_price, changed_at) VALUES (OLD.id, OLD.price, NEW.price, NOW()); END IF; END; -
Аудит и логирование: Автоматическая запись в таблицу-журнал о том, кто, когда и какие данные изменил.
-
Вычисление производных данных: Например, автоматическое обновление поля
total_amountв заказе при добавлении/удалении позиции из связанной таблицыorder_items.
Критические недостатки и риски:
- Скрытая логика: Триггеры выполняются "неявно", что усложняет отладку и анализ производительности для разработчиков, не знакомых со схемой БД.
- Влияние на производительность: Каждая операция с таблицей несёт дополнительную нагрузку по выполнению кода триггера. Каскадные триггеры могут создать длинные цепочки.
- Переносимость: Синтаксис и возможности триггеров сильно различаются между СУБД (MySQL, PostgreSQL, MS SQL).
Практическое правило: Использовать триггеры осторожно, в основном для задач, критичных к целостности данных, которые должны выполняться гарантированно при любом изменении, независимо от приложения.