MySql Заняття 9.pptx
- Количество слайдов: 12
Заняття 9. Тригери
Тригер як вид збереженої процедури Тригер – це збережена процедура особливого типу, яку користувач не викликає особисто, а використання якої обумовлено настанням визначеної події у реляційній базі даних. Тригери застосовуються для забезпечення цілісності даних і реалізації складної бізнес-логіки. Тригер запускається сервером автоматично при спробі зміни даних у таблиці, з якою він пов'язаний. Всі здійснені ним модифікації даних розглядаються як виконані в транзакції, в якій виконано дію, що викликало спрацьовування тригера. Відповідно, у разі виявлення помилки або порушення цілісності даних може відбутися відкат цієї транзакції. Створює тригер тільки власник бази даних. Це обмеження дозволяє уникнути випадкової зміни структури таблиць, способів зв'язку з ними інших об'єктів і т. д. Не можна створювати тригери для представлень і тимчасових таблиць!
Використання тригерів автоматичне обчислення значень похідних стовпців; запобігання виконанню недозволених транзакцій; виконання складних перевірок з метою захисту даних; підтримка складних обмежень цілісності; реєстрація подій, що відбуваються в БД; підтримка реплікації (синхронізації вмісту декількох копій); збирання статистики щодо доступу до таблиць БД.
Загальний синтаксис створення тригера CREATE [DEFINER = { user | CURRENT_USER }] TRIGGER <ім'я тригера> <час спрацювання тригера> <подія тригера> ON <ім'я табл> FOR EACH ROW <тіло тригера> Час спрацювання тригера: { BEFORE | AFTER } Подія тригера: { INSERT | UPDATE | DELETE }
Приклад створення тригера Приклад 1. Після видалення інформації продавця встановити значення NULL у полях snum таблиць Customers та Orders, які відповідали його номеру: CREATE TRIGGER Sal_dlt AFTER DELETE ON Sellers FOR EACH ROW BEGIN UPDATE Customers SET snum = NULL WHERE Sellers. snum = Customers. snum; UPDATE Orders SET snum = NULL WHERE Sellers. snum = Orders. snum; END;
Типи тригерів Тригери DML. Їх виконання відбувається при виконанні для таблиці будьякого оператора мови маніпулювання даними (DML). Тригери DDL. Спрацьовують у відповідь на ряд подій мови визначення даних (DDL). Ці події насамперед відповідають інструкціям SQL CREATE, ALTER, DROP і деяким системним збереженим процедурам, які виконують схожі з DDL операції (не підтримуються в My. SQL). Тригери входу можуть спрацьовувати у відповідь на подію LOGON, що виникає при установці користувальницьких сеансів (не підтримуються в My. SQL).
Тригери DML Для створення тригера DML потрібен дозвіл ALTER на таблицю, для якої створюється тригер. Існує два параметри, що визначають поведінку тригерів: AFTER. Тригер виконується після успішного виконання команд, що його викликали. Якщо ж команди з якої-небудь причини не можуть бути успішно завершені, тригер не виконується. Слід зазначити, що зміни даних в результаті виконання запиту користувача і виконання тригера здійснюється в тілі однієї транзакції: якщо відбудеться відкат тригера, то будуть відхилені і зміни користувача. § § BEFORE. Тригер викликається перед виконанням команд.
Тригери розрізняють за типом команд, на які вони реагують: § INSERT TRIGGER – запускаються при спробі додання даних за допомогою команди INSERT. § UPDATE TRIGGER – запускаються при спробі зміни даних за допомогою команди UPDATE. § DELETE TRIGGER – запускаються при спробі видалення даних за допомогою команди DELETE. При створенні тригера обов'язково має бути вказана одна із цих команд! В My. SQL допускається створення тригера, що реагує лише на одну команду.
Обмеження тригерів Інструкція CREATE TRIGGER має бути першою інструкцією в пакеті і може застосовуватися тільки до однієї таблиці. Якщо для уточнення тригера вказано ім'я схеми, то ім'я таблиці необхідно уточнити таким же чином. Усередині тригера може бути використана будь-яка інструкція SET. Обраний параметр SET залишається в силі під час виконання тригера, після чого настройки повертаються в попередній стан. Під час спрацьовування тригера результати повертаються користувачу, що викликав тригер так само, як і у випадку з збереженими процедурами. Щоб запобігти викликане спрацьовуванням тригера повернення результатів не слід включати інструкції SELECT, які повертають результат.
Видалення тригера Для видалення тригера існує команда DROP TRIGGER. В My. SQL не можливо модифікувати створений тригер! Для цього його необхідно видалити і створити знову.
Недоліки використання тригерів складність: при переміщенні деяких функцій в базу даних ускладнюються завдання її проектування, реалізації та адміністрування; прихована функціональність: перенесення частини функцій в базу даних і збереження їх у вигляді одного або декількох тригерів іноді призводить до приховування від користувача деяких функціональних можливостей. Хоча це певною мірою спрощує його роботу, але, на жаль, може стати причиною незапланованих, потенційно небажаних і шкідливих побічних ефектів, оскільки в цьому випадку користувач не в змозі контролювати всі процеси, що відбуваються в базі даних; вплив на продуктивність: перед виконанням кожної команди по зміні стану бази даних СУБД повинна перевірити тригерну умову з метою з'ясування необхідності запуску тригера для цієї команди. Виконання подібних обчислень позначається на загальній продуктивності СУБД, а в моменти пікового навантаження її зниження може стати особливо помітним. Очевидно, що при зростанні кількості тригерів збільшуються і накладні витрати, пов'язані з такими операціями.
Завдання 1. Написати тригери для власної бази даних Створити 1 нову таблицю із 3 полями (ідентифікатор, дата та інформація про модифікацію). Для однієї із таблиць бази даних написати 3 AFTER-тригери для кожного типу команд, які після виконання цих команд будуть робити запис у попередню створену таблицю про дату виконання команди та її зміст. Написати 1 BEFORE-тригер для будь-якої таблиці бази даних, який перед оновленням або доданням даних у цю таблицю буде перевіряти їх відповідність певній умові.
MySql Заняття 9.pptx