Блог

ТРИГЕРИ В MYSQL

  • 06.07.2016
  • scion

Тригер - це збережена процедура особливого типу, яку користувач не викликає особисто, а використання якої обумовлено настанням визначеної події (дії) у реляційній базі даних:вставка, видалення, оновлення даних в рядку.

підтримується в 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`;

Оновлювати тригери можна, тільки видаляти і створювати нові.