
Триггеры MySQL похожи на прослушиватели событий JavaScript. Они не выполняются до тех пор, пока не произойдет действие, к которому им было сказано прислушаться.
Вот их полезное описание из документов MySQL:
Триггер – это именуемый объект базы данных, связанный с таблицей, который активируется, когда для таблицы происходит определенное событие.
Некоторые случаи использования триггеров заключаются в выполнении проверок значений, которые нужно вставить в таблицу, или для выполнения вычислений значений, вовлеченных в обновление. — MySQL.com
Триггеры полезны для автоматизации повторяющихся задач. Вы можете просто настроить триггер для выполнения некоторых расчетов после каждого конкретного действия базы данных. Вы можете также настроить триггер для выполнения задач проверки данных в таблице.
Триггер срабатывает, когда INSERT
, UPDATE
или DELETE
операция производится в таблице базы данных. Триггер запускается для каждой строки, поэтому, если вставляется или удаляется несколько строк данных, каждая из них все равно запускает действие, настроенное триггером. Триггер можно настроить на срабатывание до или после действия.
В этом учебнике вы узнаете, как создавать триггеры, как их отбрасывать и когда они полезны.
Как создать триггер
Чтобы создать новый триггер, используйте CREATE TRIGGER
команда. Эта команда имеет следующую структуру:
CREATE TRIGGER trigger_name
trigger_time
trigger_event
ON table_name
FOR EACH ROW
trigger_body
Итак, вот распределение каждой строки:
- Ключевое слово
CREATE TRIGGER
является обязательным и сопровождается названием триггера. Вы можете использовать это имя для ссылки на триггер в будущем и для удаления триггера, если потребуется. Это название должно быть уникальным для базы данных. - The
trigger_time
является переменным значением, которое может быть только любымBEFORE
илиAFTER
. Это определяет, будет ли триггер запускаться до или после события. - The
trigger_event
это другая переменная, имеющая ограниченное количество возможных вариантов. Эта переменная не может быть иным значением, чемINSERT
,UPDATE
илиDELETE
. Он определяет, какое событие следует слушать. table_name
это имя таблицы, за которой должен следить триггер. Это должно быть имя существующей таблицы в вашей базе данных, но это может быть пустая таблица.- The
FOR EACH ROW
является другой обязательной частью определения триггера. trigger_body
это SQL-запрос, который нужно выполнить при запуске этого триггера.
Чтобы создать пример триггера, я сделаю простой users
таблицы для практики.
CREATE TABLE
users (
fullname VARCHAR(120),
email VARCHAR(120),
username VARCHAR(30),
password VARCHAR(60)
);
Теперь мы можем создать простой триггер и присоединить его к этой пустой таблице. Триггер, шифрующий строковые пароли перед их вставкой с помощью MD5
функция имела бы смысл.
CREATE TRIGGER password_hasher BEFORE INSERT ON users FOR EACH ROW
SET
NEW.password = MD5 (NEW.password);
Этот пример достаточно прост и понятен. Но э NEW
ключевое слово там. Это ключевое слово предоставляет вам доступ к создаваемым новым данным и позволяет использовать или изменять значения по своему усмотрению.
Вы можете изменить эти значения, только если вы настроили event_time
есть BEFORE
. Если event_time
установлено на AFTER
данные уже были сохранены до того, как они попали в триггер, поэтому их нельзя снова изменить.
Вы можете использовать NEW
ключевое слово в INSERT
и UPDATE
события, но не DELETE
событие.
Есть также OLD
ключевое слово, которое можно использовать в DELETE
и UPDATE
триггеры событий, которые дают вам доступ к предыдущим значениям пораженной записи. Вы не можете использовать это ключевое слово на INSERT
событие, поскольку нет предварительной записи для создания новых данных.
Чтобы проверить этот триггер, вставьте строку в users
стол:
INSERT INTO
users
VALUES
(
'idris babu',
'zubs@test.com',
'zubby1',
'password'
);
Проверьте значение таблицы. У вас должно получиться что-то вроде этого:

Значение пароля было правильно зашифровано. ????
Как сбросить триггер
После создания триггера вы можете по какой-либо причине остановить его выполнение. В этом случае вы можете сбросить курицу.
Чтобы сбросить курок, используйте DROP TRIGGER
команда. Команда нуждается только в названии триггера. Вы можете использовать следующую команду:
DROP TRIGGER password_hasher;
Выполнение этого запроса удалит триггер, который мы создали выше, и каждая запись, которая будет вставлена отныне, не будет иметь зашифрованный пароль.
Чтобы проверить это, вставьте ту же запись, что и раньше, и проверьте результат.

Только созданная запись не имеет зашифрованного пароля.
О чем следует помнить: если вы полностью сбросите таблицу, все связанные триггеры также сбросятся автоматически.
Когда использовать триггеры
- Ведение журнала: вы можете иметь триггер для автоматической записи в другую таблицу при вставке, обновлении или удалении записи из таблицы.
- Проверка данных: вы можете написать триггер, чтобы убедиться, что данные имеют определенный тип и при необходимости можно установить правильные значения.
- Синхронизация данных: Вы можете использовать триггер для обновления связанных таблиц. Например, в таблице электронной коммерции каждый раз, когда создается запись о продажах, триггер может обновлять баланс поставщика. Или если запись поставщика удалена, триггер может удалить все продукты.
Резюме
Я надеюсь, что теперь вы понимаете триггеры SQL и когда их использовать, чтобы вы могли писать лучшие запросы.
Если у вас есть какие-либо вопросы или советы, свяжитесь со мной, чтобы поделиться ими.
Чтобы прочитать больше моих статей или следить за моей работой, вы можете связаться со мной на LinkedIn, Twitter и Github. Это быстро, легко и бесплатно!