Вопрос40
Осталось:

Как работает SQL-триггер?

Образцовый ответ

Показывать ответ по умолчанию

Что такое SQL-триггер

SQL-триггер — это объект базы данных, представляющий собой специальный тип хранимой процедуры, которая автоматически выполняется при наступлении определенного события в базе данных. Эти события могут включать операции INSERT, UPDATE или DELETE на таблицах или представлениях.

Как работает SQL-триггер

Триггер активируется автоматически в ответ на заданное событие (например, добавление новой записи в таблицу).

Типы триггеров

  • BEFORE: Срабатывает до выполнения операции.
    Используется для проверки или изменения данных перед их сохранением.
  • AFTER: Срабатывает после выполнения операции.
    Часто используется для ведения логов или обновления связанных таблиц.
  • INSTEAD OF: Заменяет стандартное поведение операции.
    Используется в случаях, когда необходимо переопределить действие по умолчанию, например, при работе с представлениями.

Внутри триггера можно обращаться к старым и новым значениям данных через специальные псевдотаблицы: OLD и NEW.

Пример использования триггера

Есть таблица Employees, и нужно автоматически сохранять историю изменений зарплат сотрудников в таблицу SalaryHistory при обновлении данных.

Создание таблиц:

MySQL 8.1
-- Таблица сотрудников
CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    Name VARCHAR(100),
    Salary DECIMAL(10, 2)
);

-- Таблица истории зарплат
CREATE TABLE SalaryHistory (
    EmployeeID INT,
    OldSalary DECIMAL(10, 2),
    NewSalary DECIMAL(10, 2),
    ChangeDate DATETIME DEFAULT CURRENT_TIMESTAMP
);

Создание триггера:

MySQL 8.1
DELIMITER $$

CREATE TRIGGER trg_AfterSalaryUpdate
AFTER UPDATE ON Employees
FOR EACH ROW
BEGIN
    IF OLD.Salary <> NEW.Salary THEN
        INSERT INTO SalaryHistory (EmployeeID, OldSalary, NewSalary)
        VALUES (NEW.EmployeeID, OLD.Salary, NEW.Salary);
    END IF;
END$$

DELIMITER ;

Когда использовать триггеры

  • Ведение журналов и аудита:
    Автоматическое логирование изменений данных для отслеживания действий пользователей.
  • Поддержание целостности данных:
    Обеспечение сложных бизнес-правил, не реализуемых с помощью ограничений.
  • Синхронизация данных:
    Автоматическое обновление или модификация связанных таблиц при изменении данных.
  • Вычисление значений:
    Автоматический расчет и обновление агрегированных или производных данных.