Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О.Б.Д / лекции / 14БД.doc
Скачиваний:
27
Добавлен:
30.05.2020
Размер:
104.45 Кб
Скачать

14. Лекція: Тригери: створення і використання:

Дається визначення тригера, область його використання, місце і роль тригера в забезпеченні цілісності даних. Описуються типи тригерів. Розглядаються оператори створення, зміни, видалення тригера. Програмування тригера ілюструється прикладами створення тригерів для реалізації обмежень цілісності і збору статистичних даних.

ПЛАН

1 Визначення тригера в стандарті язика SQL

2 Реалізація тригерів в середовищі MS SQL Server

3 Типи тригерів

4 Програмування тригера

1 Визначення тригера в стандарті язика sql

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

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

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

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

Створює тригер тільки власник бази даних. Це обмеження дозволяє уникнути випадкової зміни структури таблиць, способів зв'язку з ними інших об'єктів і т.п.

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

На відміну від звичайної підпрограми, тригер виконується неявно в кожному випадку виникнення події тригера, до того ж він не має аргументів. Приведення його в дію іноді називають запуском тригера. За допомогою тригерів досягаються наступні цілі:

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

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

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

  • підтримка реплікації.

Основний формат команди CREATE TRIGGER показаний нижче:

<Визначення_тригера>::=

CREATE TRIGGER ім’я_тригера

BEFORE | AFTER <тригерна_подія>

ON <ім’я_таблиці>

[REFERENCING

<перелік_старих_або_нових_псевдонімів>]

[FOR EACH { ROW | STATEMENT}]

[WHEN(умова_тригера)]

<тіло_тригера>

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

Виконувані тригером дії задаються для кожного рядка (FOR EACH ROW), охопленого даною подією, або тільки один раз для кожної події (FOR EACH STATEMENT).

Позначення <перелік_старих_або_нових_псевдонімів> відноситься до таких компонентів, як старий або новий рядок (OLD / NEW) або стара або нова таблиця (OLD TABLE / NEW TABLE). Ясно, що старі значення не застосовні для подій вставки, а нові – для подій видалення.

За умови правильного використання тригери можуть стати дуже могутнім механізмом. Основна їх перевага полягає в тому, що стандартні функції зберігаються усередині бази даних і погоджено активізуються при кожному її оновленні. Це може істотно спростити додатки. Проте слід згадати і про властиві тригеру недоліки:

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

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

  • вплив на продуктивність: перед виконанням кожної команди по зміні стану бази даних СУБД повинна перевірити умову тригера з метою з'ясування необхідності запуску тригера для цієї команди. Виконання подібних обчислень позначається на загальній продуктивності СУБД, а в моменти пікового навантаження її зниження може стати особливе помітним. Очевидно, що при зростанні кількості тригерів збільшуються і невигідні витрати, пов'язані з такими операціями.

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

Соседние файлы в папке лекции