Тригери в SQL
Тригери як правила „подія-умова-дія”
Тригери ще називають правилами „подія-умова-дія” (event-condition-action rules, ECA rules). Особливості тригерів як обмежень:
- Тригер „спрацьовує” лише при настанні певної події (event), яка описана в тексті тригера. Зазвичай це такі події, як операції додавання, видалення і оновлення відношення. Інколи це факт завершення транзакції.
- До виконання дій тригер перевіряє умову. Для виконання дій умова має повернути TRUE, в разі FALSE виконання тригера завершується.
- В разі істинності умови виконується дія, яка є послідовністю операцій з БД, у відповідності до логіки розробника.
Приклад 14.8 (простий). Нехай є відношення
,
яке містить перелік керівних осіб кіноіндустрії, netWorth – річний дохід кожного. Треба створити тригер, який запобігає будь-якій спробі його зниження.
Рис.14.11. Приклад тригера рівня кортежу.
Рядки
| Що вони містять
|
| Заголовок, назва тригера
|
| Подія тригера – після оновлення компонента netWorth
|
3-5
| Посилання на кортежі зі старими та новими значеннями. OLD ROW та NEW ROW надаються програмісту в SQL-коді тригера, а OldTuple та NewTuple використовуються ним надалі як псевдоніми цих відношень.
|
| Код тригера повинен спрацьовувати для кожного оновленого кортежу. Альтернатива (по замовчанню) – FOR EACH STATEMENT, тоді тригер мав би спрацьовувати для SQL-виразу в цілому.
|
| Умова спрацювання тригера: старий дохід більше нового
|
8-10
| Відновлення старого рівня доходу
|
Доповнення:
- Крім AFTER, на його місці можливе слово BEFORE.
- Крім UPDATE, можливі події-операції INSERT i DELETE.
- Речення OF (рядок 2) необов’язкове. Без нього тригер спрацьовує при оновленні будь-якого компонента кортежу. OF не застосовується в командах INSERT та DELETE.
- Умова WHEN не обов’язкова. Без неї тригер спрацьовує завжди при оновленні кортежу.
- Наступні команди не можна використовувати в секції дій:
- Команди управління транзакціями, як-от COMMIT та ROLLBACK.
- Управління з’єднанням клієнта з сервером (CONNECT, DISCONNECT).
- Створення (CREATE), зміна (UPDATE) та видалення (DROP) елементів схеми.
- Визначення параметрів сеансу (SET).
- В команді видалення недоступна таблиця нових записів, лише старих. Симетрично, в команді додавання недоступна таблиця старих даних.