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(). -
NEWrefers к новой строке, которая вставляется.
Пример 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. -
OLDrefers к строке до обновления, а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
