главная/Триггеры в MySQL
MYSQL триггеры

Триггеры в 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. Это удобный способ автоматизации действий, связанных с определенными операциями в базе данных.