Использование триггеров в MySQL и MariaDB

Триггеры в MySQL (от англ. Trigger) — это специальная хранимая процедура языка SQL, которая исполняется при наступлении определенного события (например, вставка, обновление, удаление записи). Она не может вызываться вручную. Поддержка этой процедуры стала доступна в MySQL 5.0.2, а так же во всех версиях MariaDB.

Процедура хранится в СУБД MySQL и ее вызов никак не зависит от используемого языка программирования или приложения.

Преимущества использования MySQL Triggers

Помимо того, что использование триггеров не зависит от приложения и используемого языка программирования, имеется еще ряд преимуществ:

  1. Сокращение сетевого трафика
  2. Минимизация используемых ресурсов
  3. Отсутствие необходимости передачи промежуточных результатов приложению
  4. Обеспечение целостности данных
  5. Триггер запускается автоматически

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

Синтаксис создания триггера

Синтаксис созадния триггера довольно прост:

CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt

Где:

  • trigger_name — название триггера
  • trigger_time — Время срабатывания триггера. BEFORE — перед событием. AFTER — после события.
  • trigger_event — Событие:
    1. insert — событие возбуждается операторами insert, data load, replace
    2. update — событие возбуждается оператором update
    3. delete — событие возбуждается операторами delete, replace. Операторы DROP TABLE и TRUNCATE не активируют выполнение триггера
  • tbl_name — название таблицы
  • trigger_stmt выражение, которое выполняется при активации триггера

Стоит обратить внимание, что триггеры могут быть привязаны не к таблице, а, непосредственно, к представлению (VIEW). В таком случае с их помощью реализуется механизм «обновляемого представления».

Пример создания триггера

Давайте рассмотрим следующий пример. У нас есть 2 таблицы test и log. Создадим триггер, который будет записывать событие в таблицу log при добавлении записи в таблицу test.

Создадим тестовые таблицы:

/*Таблица test, за которой мы будем следить*/
CREATE TABLE `test` ( `id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `content` TEXT NOT NULL );

/*Таблица log, куда будем записывать информацию*/
CREATE TABLE `log` ( `id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `msg` VARCHAR( 255 ) NOT NULL, `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, `row_id` INT( 11 ) NOT NULL );

/*Создание триггера*/
DELIMITER | CREATE TRIGGER `update_test` AFTER INSERT ON `test` FOR EACH ROW BEGIN INSERT INTO log Set msg = ‘insert’, row_id = NEW.id; END;

Таким образом, мы создали триггер update_test, который будет срабатывать при добавлении записи в таблицу test. И, теперь, в таблице log так же появится такая же запись. А в строке row_id будет храниться id записи.

Здесь, оператор DELIMITER используется для определения знака начала/окончания процедуры. Он может быть любым. Главное, чтобы этот знак не использовался в самое процедуре.

Просмотр и удаление триггеров

Чтобы посмотреть все созданные триггеры, используйте команду:

SHOW TRIGGERS;

А чтобы удалить триггер, используйте команду DROP TRIGGER. В нашем примере, чтобы удалить созданный тригер:

DROP TRIGGER `update_test`;

Особенности использования триггеров

На что стоит обратить внимание при использовании триггеров:

  1. Если вы удалите таблицу, к которой привязаны триггеры, то они тоже удалятся
  2. Триггер запускается для каждой записи в таблице. Если ваш запрос затрагивает, к примеру, 5 записей, то триггер будет запущен ровно 5 раз
  3. Для создания триггера, вы должны иметь привелегии SUPER

Когда Ваш проект уже вырастит до серьезных размеров, Вам потребуется аренда сервера в Дата-Центре. В RigWEB к каждому выделенному серверу предоставляется бесплатное администрирование. Мы поможем Вам настроить триггеры, если необходимо.

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

Ваш адрес email не будет опубликован.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.