Вопрос №40
Осталось:
Как работает SQL-триггер?
Образцовый ответ
Показывать ответ по умолчанию
Что такое SQL-триггер
SQL-триггер — это объект базы данных, представляющий собой специальный тип хранимой процедуры, которая автоматически выполняется при наступлении определенного события в базе данных. Эти события могут включать операции INSERT, UPDATE или DELETE на таблицах или представлениях.
Как работает SQL-триггер
Триггер активируется автоматически в ответ на заданное событие (например, добавление новой записи в таблицу).
Типы триггеров
- BEFORE: Срабатывает до выполнения операции.
Используется для проверки или изменения данных перед их сохранением. - AFTER: Срабатывает после выполнения операции.
Часто используется для ведения логов или обновления связанных таблиц. - INSTEAD OF: Заменяет стандартное поведение операции.
Используется в случаях, когда необходимо переопределить действие по умолчанию, например, при работе с представлениями.
Внутри триггера можно обращаться к старым и новым значениям данных через специальные псевдотаблицы: OLD и NEW.
Пример использования триггера
Есть таблица Employees, и нужно автоматически сохранять историю изменений зарплат сотрудников в таблицу SalaryHistory при обновлении данных.
Создание таблиц:
-- Таблица сотрудников 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 );
Создание триггера:
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 ;
Когда использовать триггеры
- Ведение журналов и аудита:
Автоматическое логирование изменений данных для отслеживания действий пользователей. - Поддержание целостности данных:
Обеспечение сложных бизнес-правил, не реализуемых с помощью ограничений. - Синхронизация данных:
Автоматическое обновление или модификация связанных таблиц при изменении данных. - Вычисление значений:
Автоматический расчет и обновление агрегированных или производных данных.