MySQL - CREATE TRIGGER: руковод novičkam
Привет, стремящиеся к знаниям энтузиасты баз данных! Сегодня мы окунёмся в fascinирующий мир триггеров MySQL. Не волнуйтесь, если вы новички в программировании; я буду вашим доброжелательным проводником в этом путешествии. К концу этого руководства вы будете создавать триггеры, как профи!
Что такое триггер?
Прежде чем мы перейдём к созданию триггеров, давайте поймём, что они из себя представляют. Представьте, что у вас есть верный пес, который всегда лает, когда кто-то звонит в doorbell. В мире баз данных триггер подобен этому псу — это автоматическая реакция на конкретное событие в вашей базе данных.
Определение
Триггер — это названный объект базы данных, который связан с таблицей и активируется автоматически при occurrence конкретного события для этой таблицы.
Создание триггеров в MySQL
Теперь, когда мы знаем, что такое триггеры, давайте узнаем, как их создавать в MySQL. Это похоже на обучение новому заклинанию, но вместо взмахивания палочкой мы будем вводить команды!
Основная структура
Вот базовая структура оператора CREATE TRIGGER:
CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON table_name
FOR EACH ROW
trigger_body;
Давайте разберём это:
-
trigger_name
: Это имя вашего триггера. Выберите имя, которое описывает, что он делает. -
{BEFORE | AFTER}
: Это решает, когда активируется триггер — до или после указанного события. -
{INSERT | UPDATE | DELETE}
: Это событие, активирующее триггер. -
table_name
: Таблица, связанная с триггером. -
FOR EACH ROW
: Это означает, что триггер активируется для каждой строки, пострадавшей от события. -
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