Как использовать триггеры SQL

Триггеры 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'
    );

Проверьте значение таблицы. У вас должно получиться что-то вроде этого:

Скриншот-2023-02-18-14.02.44

Значение пароля было правильно зашифровано. ????

Как сбросить триггер

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

Чтобы сбросить курок, используйте DROP TRIGGER команда. Команда нуждается только в названии триггера. Вы можете использовать следующую команду:

DROP TRIGGER password_hasher;

Выполнение этого запроса удалит триггер, который мы создали выше, и каждая запись, которая будет вставлена ​​отныне, не будет иметь зашифрованный пароль.

Чтобы проверить это, вставьте ту же запись, что и раньше, и проверьте результат.

Скриншот-2023-02-18-ат-24.02.21

Только созданная запись не имеет зашифрованного пароля.

О чем следует помнить: если вы полностью сбросите таблицу, все связанные триггеры также сбросятся автоматически.

Когда использовать триггеры

  1. Ведение журнала: вы можете иметь триггер для автоматической записи в другую таблицу при вставке, обновлении или удалении записи из таблицы.
  2. Проверка данных: вы можете написать триггер, чтобы убедиться, что данные имеют определенный тип и при необходимости можно установить правильные значения.
  3. Синхронизация данных: Вы можете использовать триггер для обновления связанных таблиц. Например, в таблице электронной коммерции каждый раз, когда создается запись о продажах, триггер может обновлять баланс поставщика. Или если запись поставщика удалена, триггер может удалить все продукты.

Резюме

Я надеюсь, что теперь вы понимаете триггеры SQL и когда их использовать, чтобы вы могли писать лучшие запросы.

Если у вас есть какие-либо вопросы или советы, свяжитесь со мной, чтобы поделиться ими.

Чтобы прочитать больше моих статей или следить за моей работой, вы можете связаться со мной на LinkedIn, Twitter и Github. Это быстро, легко и бесплатно!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *