MySQL - CREATE TRIGGER: руковод novičkam

Привет, стремящиеся к знаниям энтузиасты баз данных! Сегодня мы окунёмся в fascinирующий мир триггеров MySQL. Не волнуйтесь, если вы новички в программировании; я буду вашим доброжелательным проводником в этом путешествии. К концу этого руководства вы будете создавать триггеры, как профи!

MySQL - Create Trigger

Что такое триггер?

Прежде чем мы перейдём к созданию триггеров, давайте поймём, что они из себя представляют. Представьте, что у вас есть верный пес, который всегда лает, когда кто-то звонит в doorbell. В мире баз данных триггер подобен этому псу — это автоматическая реакция на конкретное событие в вашей базе данных.

Определение

Триггер — это названный объект базы данных, который связан с таблицей и активируется автоматически при occurrence конкретного события для этой таблицы.

Создание триггеров в MySQL

Теперь, когда мы знаем, что такое триггеры, давайте узнаем, как их создавать в MySQL. Это похоже на обучение новому заклинанию, но вместо взмахивания палочкой мы будем вводить команды!

Основная структура

Вот базовая структура оператора CREATE TRIGGER:

CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON table_name
FOR EACH ROW
trigger_body;

Давайте разберём это:

  1. trigger_name: Это имя вашего триггера. Выберите имя, которое описывает, что он делает.
  2. {BEFORE | AFTER}: Это решает, когда активируется триггер — до или после указанного события.
  3. {INSERT | UPDATE | DELETE}: Это событие, активирующее триггер.
  4. table_name: Таблица, связанная с триггером.
  5. FOR EACH ROW: Это означает, что триггер активируется для каждой строки, пострадавшей от события.
  6. trigger_body: SQL-операторы, которые будут выполняться при активации триггера.

Пример 1: Триггер BEFORE INSERT

Давайте создадим триггер, который ensures, что все имена сотрудников capitalized перед их вставкой в таблицу.

CREATE TRIGGER capitalize_name
BEFORE INSERT ON employees
FOR EACH ROW
SET NEW.name = UPPER(NEW.name);

В этом примере:

  • Триггер называется capitalize_name.
  • Он активируется ДО операции INSERT в таблице employees.
  • Для каждой новой строки он capitalizes столбец name с помощью функции UPPER().
  • NEW refers к новой строке, которая вставляется.

Пример 2: Триггер AFTER UPDATE

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

CREATE TRIGGER log_salary_changes
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
IF OLD.salary <> NEW.salary THEN
INSERT INTO salary_log (employee_id, old_salary, new_salary, change_date)
VALUES (NEW.id, OLD.salary, NEW.salary, NOW());
END IF;
END;

Вот что происходит:

  • Триггер называется log_salary_changes.
  • Он активируется ПОСЛЕ операции UPDATE в таблице employees.
  • Он проверяет, изменилась ли зарплата (OLD.salary <> NEW.salary).
  • Если есть изменения, он вставляет запись в таблицу salary_log.
  • OLD refers к строке до обновления, а NEW — к строке после обновления.

Создание триггеров с помощью клиентской программы

Хотя мы можем создавать триггеры напрямую в MySQL, иногда удобнее использовать клиентскую программу. Давайте посмотрим, как это можно сделать с помощью командной строки MySQL.

Шаг 1: Подключиться к MySQL

Сначала откройте ваш terminal или командную строку и подключитесь к MySQL:

mysql -u username -p

Замените username на ваше имя пользователя MySQL. Вас спросят ввести ваш пароль.

Шаг 2: Выбрать базу данных

После подключения выберите базу данных, с которой вы хотите работать:

USE your_database_name;

Шаг 3: Создать триггер

Теперь вы можете создать свой триггер. Давайте используем наш пример с logом зарплаты:

DELIMITER //

CREATE TRIGGER log_salary_changes
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
IF OLD.salary <> NEW.salary THEN
INSERT INTO salary_log (employee_id, old_salary, new_salary, change_date)
VALUES (NEW.id, OLD.salary, NEW.salary, NOW());
END IF;
END//

DELIMITER ;

Обратите внимание на использование DELIMITER // и DELIMITER ;. Это необходимо, так как наш bodies триггера содержат semicolons, поэтому мы временно меняем разделитель.

Шаг 4: Проверить триггер

Чтобы убедиться, что ваш триггер был успешно создан, вы можете использовать:

SHOW TRIGGERS;

Это покажет все триггеры в текущей базе данных.

Методы триггеров

Вот таблица最常见的 методов триггеров в MySQL:

Метод Описание
BEFORE INSERT Активируется перед вставкой новой строки
AFTER INSERT Активируется после вставки новой строки
BEFORE UPDATE Активируется перед обновлением существующей строки
AFTER UPDATE Активируется после обновления существующей строки
BEFORE DELETE Активируется перед удалением существующей строки
AFTER DELETE Активируется после удаления существующей строки

помните, что каждый из этих методов может быть мощным инструментом при правильном использовании. Это как швейцарский армейский нож для вашей базы данных!

Заключение

Поздравляю! Вы только что сделали свои первые шаги в мир триггеров MySQL. Мы рассмотрели, что такое триггеры, как их создавать и даже как использовать их с клиентской программой. помните, как и любое мощное средство, триггеры должны использоваться wisely. Они могут значительно улучшить ваши операции с базой данных, но чрезмерное их использование может привести к сложности и проблемам с производительностью.

Продолжая ваше путешествие в MySQL, продолжайте практиковаться и экспериментировать с триггерами. Вскоре вы будете создавать магию с базами данных, которая заставит завидовать даже Merlin! Удачи в кодировании, и пусть ваши запросы всегда возвращают ожидаемые результаты!

Credits: Image by storyset