Отдел продаж: 1100-1900

Техническая поддержка: работает

Использование триггеров в 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 к каждому выделенному серверу предоставляется бесплатное администрирование. Мы поможем Вам настроить триггеры, если необходимо.

Заказать VDS

Мощный VPS за 545 руб. от RigWEB.RU с администрированием

VPS/VDS серверы

Помогла ли вам статья?

Да Нет
10

раз уже помогла

Спасибо, что выбрали RigWEB!