Ответ
Триггер (Trigger) — это специальный хранимый блок кода в СУБД, который автоматически выполняется при наступлении определённого события с таблицей: INSERT, UPDATE или DELETE. Триггер может срабатывать BEFORE (до) или AFTER (после) операции.
Основное назначение:
- Обеспечение целостности данных и сложных бизнес-правил.
- Ведение журнала аудита (логирования изменений).
- Каскадные обновления или вычисления производных данных.
Пример триггера для аудита в PostgreSQL:
CREATE TRIGGER audit_employee_update
AFTER UPDATE ON employees
FOR EACH ROW
EXECUTE FUNCTION log_employee_change();
-- Связанная функция
CREATE OR REPLACE FUNCTION log_employee_change()
RETURNS TRIGGER AS $$
BEGIN
INSERT INTO employee_audit (
employee_id,
changed_at,
old_salary,
new_salary
) VALUES (
OLD.id,
NOW(),
OLD.salary,
NEW.salary
);
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
Важные аспекты:
- Производительность: Триггеры добавляют накладные расходы на каждую операцию DML.
- Отладка: Их выполнение неявно, что может усложнить поиск ошибок.
- Рекурсия: Необходимо избегать ситуаций, когда триггер вызывает операцию, вновь запускающую этот же триггер.