Триггер — это хранимая процедура особого типа, которую пользователь не вызывает непосредственно а вызывается исполнением не которых событий таких как вставленные, удаление, обновление данных в строке.
в MySQL > 5.0.2
Синтаксис:
name_trigger — Имя триггера в таблицу должно быть уникальным
time_trigger — Когда запускать триггер(BEFORE — перед событием. AFTER — после события)
event_trigger — Событие
/* Возможные события
insert — событие вызывается операторами insert, data load, replace.
update — событие вызывается оператором update.
delete — событие вызывается операторами delete, replace.
*/
name_tbl — Имя таблицы.
trigger_expr — Выражения триггера то есть действие которое происходит SQL запрос так же возможны логические выражения.
Пример использования.
Например нам нужно после вставки в категорию строки такие же данные вставить в таблицу левого меню. Такое часто нужно если в меню нужно выводить записи из нескольких таблиц(модулей).
Прошу обратить внимание на псевдоним NEW(это означает что выбирается поле после чем оно модифицируется или удалится, так же может иметь место псевдоним OLD что значит поле до действий). По идеи это обычный sql запрос, не забудьте поставить "; " в конце запроса(не в конце триггера а именно запроса).
Но представьте что перед тем как выполнить запрос Вам нужно проверить входные данные. Для это вы можете использовать логические выражения.
IF(NEW.id_category IS NULL) — логическое выражение.после него обязательно идет команда THEN(тогда) и только после THEN идет действие.
END IF — окончание логического выражения.
DELIMITER // — это изменение разделителя
Так же возможно работать с переменными.Объявление переменной.
set@count =1;
Удаление триггера.
Обновлять триггеры нельзя только удалять и создавать новый.
в MySQL > 5.0.2
Синтаксис:
CREATE TRIGGER name_trigger time_trigger event_trigger
ON name_tbl FOR EACH ROW trigger_expr
name_trigger — Имя триггера в таблицу должно быть уникальным
time_trigger — Когда запускать триггер(BEFORE — перед событием. AFTER — после события)
event_trigger — Событие
/* Возможные события
insert — событие вызывается операторами insert, data load, replace.
update — событие вызывается оператором update.
delete — событие вызывается операторами delete, replace.
*/
name_tbl — Имя таблицы.
trigger_expr — Выражения триггера то есть действие которое происходит SQL запрос так же возможны логические выражения.
Пример использования.
Например нам нужно после вставки в категорию строки такие же данные вставить в таблицу левого меню. Такое часто нужно если в меню нужно выводить записи из нескольких таблиц(модулей).
DELIMITER //
CREATE TRIGGER `insert_left_menu` AFTER INSERT ON `categories`
FOR EACH ROW
INSERT INTO `left_menu` SET uri=NEW.id, id_category = NEW.id,name = NEW.name,status=NEW.status;
DELIMITER ;
Прошу обратить внимание на псевдоним NEW(это означает что выбирается поле после чем оно модифицируется или удалится, так же может иметь место псевдоним OLD что значит поле до действий). По идеи это обычный sql запрос, не забудьте поставить "; " в конце запроса(не в конце триггера а именно запроса).
Но представьте что перед тем как выполнить запрос Вам нужно проверить входные данные. Для это вы можете использовать логические выражения.
DELIMITER //
CREATE TRIGGER `insert_left_menu` AFTER INSERT ON `categories`
FOR EACH ROW IF(NEW.id_category IS NULL)
THEN
INSERT INTO `left_menu` SET uri=NEW.id, id_category = NEW.id,name = NEW.name,status=NEW.status;
END IF
DELIMITER ;
IF(NEW.id_category IS NULL) — логическое выражение.после него обязательно идет команда THEN(тогда) и только после THEN идет действие.
END IF — окончание логического выражения.
DELIMITER // — это изменение разделителя
Так же возможно работать с переменными.Объявление переменной.
set@count =1;
Удаление триггера.
DROP TRIGGER IF EXISTS `insert_left_menu` ;
Обновлять триггеры нельзя только удалять и создавать новый.