Використання тригерів в СУБД mysql

Тригер (англ. Trigger) - це збережена відкомпільоване SQL-процедура, яка не викликається безпосередньо, а виповнюється при настанні певної події всередині бази даних (вставки, видалення, оновлення записів). Підтримка тригерів в MySQL почалася з версії 5.0.2

Збережені процедури запускають у всіх середовищах, і немає необхідності перестроювання логіки. З того моменту як ви створили збережену процедуру, не важливо який додаток ви використовуєте для виклику процедури. Також не важливо якою мовою ви програмуєте, логіка процедури міститься на сервері БД.

Також збережені процедури можуть скоротити мережевий трафік. Складні, повторювані завдання можна обробляти за допомогою процедур на сервері Баз даних, без необхідності відсилання проміжних результатів з додатком.

Тригери застосовуються для забезпечення цілісності даних і реалізації складної бізнес-логіки. Тригер запускається сервером автоматично при спробі зміни даних в таблиці, з якою він пов'язаний. Всі вироблені їм модифікації даних розглядаються як виконуються в транзакції, в якій виконано дію, яка викликала спрацьовування тригера. Відповідно, в разі виявлення помилки або порушення цілісності даних може статися відкат цієї транзакції.

Загальний вигляд синтаксису для створення тригера:

де
trigger_name - назва тригера;
trigger_time - час спрацьовування тригера. BEFORE - перед подією. AFTER - після події;
trigger_event - подія:

  • insert - подія збуджується операторами insert. data load. replace;
  • update - подія збуджується оператором update;
  • delete - подія збуджується операторами delete. replace. Оператори DROPTABLE і TRUNCATE не активується виконання тригера;

tbl_name - назва таблиці;
trigger_body - вираз, яке виконується при активації тригера.

Тригери можуть бути прив'язані не до таблиці, а до подання (VIEW). В цьому випадку з їх допомогою реалізується механізм "оновлюваного вистави".

Приклад: створимо дві таблиці test і log. напишемо тригер, який після додавання кожного запису в 1-ю таблицю буде вести лог цієї події:

Тут оператор DELIMITER служить для визначення знака початку / закінчення процедури і може складатися більш, ніж з одного символу (необхідно вибирати роздільник, який не буде використовуватися в процедурі).

На стовпчики таблиці, до якої прив'язаний тригер можна посилатися за допомогою псевдонімів OLD і NEW. OLD.col_name вказує на стовпець з ім'ям col_name до зміни або видалення даних. NEW.col_name відноситься до колонки новому рядку після вставки або існуючої - відразу після її поновлення.

Для видалення тригера необхідно виконати запит:

Тригери мають кілька важливих особливостей використання:

  1. тригери в MySQL 5 можуть створюватися тільки користувачем з привілеєм SUPER;
  2. при використанні запиту, що зачіпає N - записів, тригер буде запускатися N - раз;
  3. після видалення таблиці, СУБД MySQL автоматично видаляє прив'язані до неї тригери.

Список використаний джерел