Триггеры в MySQL
Триггеры в MySQL — это специальные процедуры, которые автоматически выполняются в ответ на определенные события в базе данных, такие как вставка, обновление или удаление записей в таблице.
События, Инициирующие Триггер:
- BEFORE: Выполняется до операции вставки, обновления или удаления.
- AFTER: Выполняется после операции вставки, обновления или удаления.
Триггер всегда связан с таблицей и срабатывает при выполнении операции над этой таблицей.
Пример Создания Триггера
Предположим, у нас есть таблица employees и мы хотим автоматически записывать в лог каждое изменение зарплаты сотрудников. Для этого мы создадим триггер before_employee_update.
Структура Таблиц
- Таблица employees:
- id (INT)
- name (VARCHAR)
- salary (DECIMAL)
- Таблица salary_audit:
- employee_id (INT)
- old_salary (DECIMAL)
- new_salary (DECIMAL)
- change_date (DATETIME)
DELIMITER //
CREATE TRIGGER before_employee_update
BEFORE UPDATE ON employees
FOR EACH ROW
BEGIN
IF NEW.salary <> OLD.salary THEN
INSERT INTO salary_audit(employee_id, old_salary, new_salary, change_date)
VALUES(OLD.id, OLD.salary, NEW.salary, NOW());
END IF;
END;
//
DELIMITER ;
- DELIMITER //: Изменяет стандартный разделитель SQL, чтобы позволить использовать ; внутри тела триггера.
- CREATE TRIGGER before_employee_update: Создает новый триггер с именем before_employee_update.
- BEFORE UPDATE ON employees: Определяет, что триггер будет срабатывать перед обновлением каждой строки в таблице employees.
- FOR EACH ROW BEGIN … END: Указывает блок кода, который будет выполняться для каждой строки, затронутой операцией обновления.
- IF NEW.salary <> OLD.salary THEN … END IF: Проверяет, изменилась ли зарплата сотрудника. Если да, то выполняется вставка в таблицу salary_audit.
- INSERT INTO salary_audit(…) VALUES(…): Вставляет запись об изменении зарплаты в таблицу аудита.
- DELIMITER ;: Возвращает разделитель обратно на стандартный.
После создания этот триггер будет автоматически отслеживать изменения зарплат сотрудников, внося соответствующие записи в таблицу salary_audit. Это удобный способ автоматизации действий, связанных с определенными операциями в базе данных.