
- •ЛЕКЦІЯ 14
- •План
- •Тригери
- •Цілі, що можна досягти
- •Недоліки тригерів
- •Формальний синтаксис
- •Типи тригерів
- •Тригери розрізняють по типу команд, на які вони реагують
- •Для кожного тригера створюється свій комплекттаблиць inserted і deleted
- •Використання тригера для реалізації обмежень на значення. В тій, що додається в таблицю
- •При продажу або отриманні товару необхідно відповідним чином змінити кількість його складського запасу.
- •Для товару, код якого вказаний при видаленні запису, необхідно відкоректувати його залишок на

ЛЕКЦІЯ 14
ТЕМА: Тригери: створення і використання

План
1 Визначення тригера в стандарті язика SQL
2 Реалізація тригерів в середовищі MS SQL Server
3 Типи тригерів
4 Програмування тригера

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

Цілі, що можна досягти
перевірка коректності введених даних і виконання складних обмежень цілісності даних;
видача попереджень, що нагадують про необхідність виконання деяких дій при оновленні таблиці, реалізованому певним чином;
накопичення аудиторської інформації за допомогою фіксації відомостей про внесені зміни і тих осіб, які їх виконали;
підтримка реплікації.

Недоліки тригерів
складність
прихована функціональність
вплив на продуктивність

Формальний синтаксис
<Визначення_тригера>::=
{CREATE | ALTER} TRIGGER ім’я_тригера
ON {ім’я_таблиці | ім’я_уявлення} [WITH ENCRYPTION ]
{{ { FOR | AFTER | INSTEAD }
{[ DELETE] [,] [ INSERT] [,] [ UPDATE] } [ WITH APPEND ]
[ NOT FOR REPLICATION ] AS
sql_оператор[...n] } |
{{FOR | AFTER | INSTEAD }
{[INSERT] [,]
[UPDATE] }
[ WITH APPEND]
[ NOT FOR REPLICATION] AS
{ IF UPDATE(ім’я_колонки)
[ {AND | OR} UPDATE(ім’я_колонки)] [...n] |
IF (COLUMNS_UPDATES() {оператор_біт_обробки} біт_маска_зміни)
{оператор_біт_порівняння}бит_маска [...n]}
sql_оператор [...n] }}

Типи тригерів
AFTER. Тригер виконується після успішного виконання команд, що викликали його.
INSTEAD. Тригер викликається замість виконання команд

Тригери розрізняють по типу команд, на які вони реагують
INSERT TRIGGER – запускаються при спробі вставки даних за допомогою команди INSERT.
UPDATE TRIGGER – запускаються при спробі зміни даних за допомогою команди UPDATE.
DELETE TRIGGER – запускаються при спробі видалення даних за допомогою команди DELETE.

Для кожного тригера створюється свій комплекттаблиць inserted і deleted
команда INSERT – в таблиці inserted містяться всі рядки, які користувач намагається вставити в таблицю; в таблиці deleted не буде жодного рядка; після завершення тригера всі рядки з таблиці inserted перемістяться в початкову таблицю;
команда DELETE – в таблиці deleted міститимуться всі рядки, які користувач спробує видалити; тригер може перевірити кожний рядок і визначити, чи дозволено її видалення; в таблиці inserted не опиниться жодного рядка;
команда UPDATE – при її виконанні в таблиці deleted знаходяться старі значення рядків, які будуть видалені при успішному завершенні тригера. Нові значення рядків містяться в таблиці inserted. Ці рядки додадуться в початкову таблицю після успішного виконання тригера

Використання тригера для реалізації обмежень на значення. В тій, що додається в таблицю Операція запису кількість проданого товару повинна бути не більше, ніж його залишок з таблиці Склад
CREATE TRIGGER Триггер_ins |
FROM Склад, Операція |
ON Операція FOR INSERT |
WHERE Склад.КодТовара= |
AS |
Операція.КодТовара)) |
IF @@ROWCOUNT=1 |
BEGIN |
BEGIN |
ROLLBACK TRAN |
IF NOT EXISTS(SELECT * |
|
FROM inserted |
'Відміна поставки: товару на |
WHERE |
складі нема' |
-inserted.Кількість<=ALL(SE |
END |
LECT |
END |
Склад.Залишок |
|