
- •Мова адміністрування бд (мабд)
- •Група Data Control Language (dcl)
- •Група Transaction Control Language (tcl)
- •Група Cursor Control Language (ccl)
- •Пр иклади використання операторів адміністрування
- •Створення і ліквідація ролей
- •Передача привілеїв і ролей
- •Уявлення (View)
- •Поняття збереженої процедури
- •Збережені процедури в конкретних середовищах
- •Типи збережених процедур
- •Створення, зміна і видалення збережених процедур
- •Виконання збереженої процедури .
- •6.5. Визначення тригера в стандарті мови sql
- •Реалізація тригерів в середовищі ms sql Server
- •Типи тригерів
- •Програмування тригера
- •6.7. Технології використання sql
- •Поняття інтерактивного sql
- •Утиліта інтерактивного доступу isql субд Sybase sql Anywhere
- •Приклад використання інтерактивного sql в субд mysql
6.5. Визначення тригера в стандарті мови sql
Тригери є одним з різновидів збережених процедурі 12]. їх виконання відбувається при виконанні для таблиці якого-небудь оператора мови маніпулювання даними (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). Ясно, що старі значення не застосовні для подій вставки, а нові - для подій видалення.
За умови правильного використання тригери можуть стати дуже потужним механізмом. Основна їх перевага полягає в тому, що стандартні функції зберігаються усередині бази даних і погоджено активізуються при кожному її оновленні. Це може істотно спростити прикладну програму. Проте слід згадати і про властивих тригеру недоліках:
складність: при переміщенні деяких функцій в базу даних ускладнюються завдання її проектування, реалізації і адміністрування;
прихована функціональність: перенесення частини функцій в базу даних і збереження їх у вигляді одного або декількох тригерів іноді приводить до приховування від користувача деяких функціональних можливостей, що може привести до небажаних і шкідливих побічних ефектів.
вплив на продуктивність: перед виконанням кожної команди по зміні стану бази даних СУБД повинна перевірити умову тригера з метою з'ясування необхідності запуску тригера для цієї команди, що знижує продуктивність, особливо, якщо навантаження пікове.