Что такое триггер в базах данных?

«Что такое триггер в базах данных?» — вопрос из категории Базы данных и SQL, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Триггер (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.
  • Отладка: Их выполнение неявно, что может усложнить поиск ошибок.
  • Рекурсия: Необходимо избегать ситуаций, когда триггер вызывает операцию, вновь запускающую этот же триггер.