Триггер — это хранимая процедура, которая исполняется при наступлении определенного события. События, к которым можно привязать триггеры — INSERT, UPDATE и DELETE. Триггер исполняется до BEFORE или AFTER после наступления события.
Примеры создания триггеров на mysql.com: для версии 5,5 и 5,7
Статья об использовании триггеров в MySQL.
Синтаксис создания триггера
1 |
CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt |
Где:
trigger_name — название триггера
trigger_time — время срабатывания триггера. BEFORE или AFTER.
trigger_event — событие:
insert — событие срабатывает при вызове операторов insert, data load, replace
update — событие срабатывает при вызове оператора update
delete — событие срабатывает при вызове операторов delete, replace.
tbl_name — название таблицы
trigger_stmt выражение, которое выполняется при активации триггера
Операторы DROP TABLE и TRUNCATE не активируют выполнение триггера.
Пример
1 2 3 4 5 6 7 |
CREATE TABLE `countries` ( `country_id` int(11) NOT NULL, `name` varchar(255) NOT NULL, `currency_code` varchar(5) NOT NULL, `currency` varchar(255) DEFAULT NULL, PRIMARY KEY (`country_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 | |
Триггер для данной таблицы:
1 2 3 4 5 6 7 8 9 10 11 12 |
DELIMITER | DROP TRIGGER IF EXISTS test1 | CREATE TRIGGER test1 AFTER UPDATE ON new_view FOR EACH ROW BEGIN ---если регион изменился IF OLD.country_id <> NEW.country_id THEN ----сделаем запись в журнал INSERT INTO log1 VALUES (NOW(), USER(), OLD.country_id, NEW.country_id); END IF; END; | DELIMITER ; |
Оператор DELIMITER определяет место начала и конца процедуры. Для DELIMITER необходимо обязательно выбирать разделитель, который не будет использоваться в процедуре. Он может состоять из нескольких символов. После DELIMITER следует вернуть в исходное состояние.
На столбцы изменяемой таблицы (к которой привязан триггер) можно ссылаться с помощью псевдонимов NEW и OLD. OLD.country_id указывает на столбец с именем country_id до изменения данных. NEW.country_id относится к колонке с обновлёнными данными.
Удалить триггер
1 |
DROP TRIGGER `update_test`; |
Просмотр существующих в БД триггеров:
1 |
SHOW TRIGGERS; |
Особенности использования триггеров
ВMySQL 5 триггеры могут создаваться только пользователем с привилегией SUPER;
Если запрос затрагивает изменение N записей, то и триггер будет вызываться N раз.
После удаления таблицы с триггерами, СУБД автоматически удаляет и все привязанные к ней триггеры.
Свежие комментарии