Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
13
Добавлен:
07.02.2016
Размер:
65.02 Кб
Скачать

Лабораторна робота № 8

ТЕМА РОБОТИ: Тригери.

МЕТА РОБОТИ: Навчитися створювати, використовувати й видаляти тригери.

ТЕОРЕТИЧНІ ВІДОМОСТІ

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

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

SQL-Server розглядає правила й стандартні значення (і на цій основі приймає відповідні рішення) перше ніж записує інформацію в базу даних. Це щось начебто «попереднього фільтра», що відсіває інформацію, що не задовольняє деяким умовам.

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

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

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

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

Створення тригерів

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

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

CREATE TRIGGER [власник.] ім'я_тригера

ON [ власник. ] ім'я_таблиці

FOR {INSERT, UPDATE, DELETE}

[WITH ENCRIPTION]

AS оператори_SQL

Опис команди CREATE TRIGGER.

1. Ім'я_тригера. Ім'я тригера повинне задовольняти стандартним угодам про іменування об'єктів SQL-Server.

  1. INSERT (Вставити), UPDATE (Обновити), DELETE (Видалити). Область застосування тригерів вичерпується цими ключовими словами. Тільки ці операції можуть ініціювати виконання тригера.

  2. WITH ENCRIPTION (Із шифруванням). Дана опція призначена для того, щоб не дозволити користувачам у їхньому робітничому середовищі прочитати текст тригера після розміщення його на сервері. Це дуже зручна можливість для розроблювачів додатків, які створюють свої продукти для середовища SQL-Server і не хочуть, щоб замовники могли дизасемблювати код і модифікувати його.

  3. Оператори_SQL. Тригер може містити довільне число операторів Transact- SQL, за умови, що вони укладені між парними операторами BEGIN й END.

Приклад створення тригера:

Для цього приклада створимо наступні дві таблиці:

  • ім'я таблиці TABLE1.

використовувані поля:

MYID INT, MYNAME CHAR(15).

  • ім'я таблиці TABLE2.

використовувані поля:

MYID INT, MYVALUE SMALLMONEY.

Для створення тригера INSCHECK за допомогою утиліти SQL Server Enterprise Manager необхідно вибрати таблицю TABLE2 у списку об'єктів бази даних, після чого виконати команду All tasks / Manage Triggers меню Action. Дані дії приведуть до відкриття діалогового вікна властивостей тригера. У дане діалогове вікно введіть наступний текст:

CREATE TRIGGER INSCHECK ON TABLE2

FOR INSERT

AS

DECLARE @X INT

SELECT @X = I.MYID FROM TABLE2 A,

INSERTED I WHERE A.MYID = I.MYID

IF NOT (EXISTS (SELECT * FROM

TABLE1 WHERE MYID = @X))

BEGIN

ROLLBACK TRAN

RAISERROR ('ПОМИЛКА ЦІЛІСНОСТІ ! ! !',16,10)

END

Приклад створення тригера, що дозволяє видаляти всі залежні записи з таблиці TABLE2 при видаленні запису з таблиці TABLE1.

CREATE TRIGGER DELCHECK ON TABLE1

FOR DELETE

AS

DECLARE @X INT

SELECT @X = D.MYID FROM TABLE1 A,

DELETED D WHERE A.MYID = D.MYID

IF EXISTS (SELECT * FROM

TABLE2 WHERE MYID = @X)

DELETE FROM TABLE2 WHERE MYID = @X

Використання тригерів

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

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

По-друге, тригер оператора DELETE часто використається для виконання каскадної операції видалення, тобто коли слідом за основним набором записів потрібно видалити й основні записи.

Використання вкладених тригерів

В SQL-Server 7.0 можна використати до 16 рівнів вкладення тригерів. Але якщо подібне вкладення тригерів є небажаним, то його можна заборонити, відповідним чином сконфігував SQL-Server. Для цієї мети використається процедура sp_configure.

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

Під час створення тригера SQL-Server не може виявити вкладення SQL-Server не може виявити вкладення, що стане причиною нескінченного зациклення ; це може з'ясуватися тільки під час виконання. Зациклення може відбутися у випадку, якщо Trigger_A виконує відновлення таблиці Table_A, а це, у свою чергу, викликає відновлення таблиці Table_B. У той же час у таблиці Table_B є аналогічний тригер Trigger_B, що запускається у випадку відновлення Table_B і викликає відновлення Table_A. Таким чином, якщо користувач обновить одну із цих таблиць, те два зазначених тригери будуть запускати один одного нескінченно. Якщо SQL-Server виявить подібну ситуацію, то він перерве виконання тригерів.

Видалення тригерів

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

DROP TRIGGER [ власник.] [ , [ ім'я_тригера . . . ] ]

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

ПОРЯДОК ПРОВЕДЕННЯ ЛАБОРАТОРНОЇ РОБОТИ

  1. Вивчити теоретичні відомості

  2. Створити тригер на вставку данних.

  3. Створити тригер на заміну данних.

  4. Створити тригер на вилучення данних.

  5. Перевірити роботу створених тригерів.

  6. Створити вкладені тригери.

  7. Вилучити тригери.

  8. Предоставити письмовий звіт по роботі.

ПИТАННЯ ДЛЯ САМОПЕРЕВІРКИ

  1. Дайте визначення терміну “тригер”?

  2. Для чого використовуються тригери?

  3. Як створити тригер?

  4. Які обмеження накладаються при створенні тригерів?

  5. Порівняйте тригера та збережені процедури. Що в них спільного та відмінного?

  6. Опишіть команду CREATE TRIGGER..

  7. Яку кількість операторів може містити трігер?

  8. Які операції можуть ініціювати виконання тригера?

  9. Яка опція дозволяє користувачам прочитати текст тригера після розміщення його на сервері?

  10. Наведіть приклад створення тригера. Які дії необхідно для цього виконати?

  11. Для чого призначені тригери операторів INSERT й UPDATE?

  12. Для чого призначений тригер оператора DELETE?

  13. Що означає вкладення тригерів?

  14. Як заборонити вкладення тригерів?

  15. Як видалити тригери з таблиці?

7

Соседние файлы в папке Учебное пособие