Для чего используются триггеры в базе данных?

«Для чего используются триггеры в базе данных?» — вопрос из категории Базы данных, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Триггеры — это хранимые процедуры, которые автоматически выполняются (срабатывают) при наступлении определённого события с таблицей: INSERT, UPDATE или DELETE.

Основные задачи триггеров:

  1. Обеспечение сложной бизнес-логики и целостности данных на уровне БД.

    -- Триггер для поддержки истории изменений цены товара
    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;
  2. Аудит и логирование: Автоматическая запись в таблицу-журнал о том, кто, когда и какие данные изменил.

  3. Вычисление производных данных: Например, автоматическое обновление поля total_amount в заказе при добавлении/удалении позиции из связанной таблицы order_items.

Критические недостатки и риски:

  • Скрытая логика: Триггеры выполняются "неявно", что усложняет отладку и анализ производительности для разработчиков, не знакомых со схемой БД.
  • Влияние на производительность: Каждая операция с таблицей несёт дополнительную нагрузку по выполнению кода триггера. Каскадные триггеры могут создать длинные цепочки.
  • Переносимость: Синтаксис и возможности триггеров сильно различаются между СУБД (MySQL, PostgreSQL, MS SQL).

Практическое правило: Использовать триггеры осторожно, в основном для задач, критичных к целостности данных, которые должны выполняться гарантированно при любом изменении, независимо от приложения.