В тази статия ще научим за концепцията на тригера в SQL и неговото изпълнение с помощта на пример.
Тригер в езика за структурирани заявки е набор от процедурни оператори, изпълнявани автоматично, когато има обратна връзка за определени събития в таблицата в базата данни. Тригерите се използват за защита на целостта на данните в базата данни.
Нека видим следната ситуация, за да разберем концепцията за тригер в SQL:
Да предположим, че Суприя е мениджър по информационни технологии в мултинационална компания. Когато записът на нов служител бъде въведен в базата данни, той трябва да изпрати съобщението „Поздравления“ на всеки нов служител. Ако има пет или шест служители, Суприя може да го направи ръчно, но ако броят на новите служители е повече от хиляда, тогава в такова състояние тя трябва да използва тригера в базата данни.
Така Суприя трябва да създаде тригера в таблицата, който автоматично ще изпрати съобщение „Поздравления“ до новите служители, след като записът им бъде вмъкнат в базата данни.
Тригерът винаги се изпълнява с конкретната таблица в базата данни. Ако премахнем таблицата, всички тригери, свързани с тази таблица, също се изтриват автоматично.
Тригерите в езика на структурираните заявки се извикват само преди събитията да са настъпили или след като събитията са настъпили.
Само три събития възникват в тригера преди или след събитията са събитията Insert, Update events или Delete.
1. INSERT Event :Събитието за вмъкване възниква всеки път, когато в таблицата се вмъкне нов запис.
2. Събитие АКТУАЛИЗИРАНЕ :Събитие за актуализиране възниква всеки път, когато съществуващите записи се актуализират в таблицата.
3. ИЗТРИВАНЕ на събитие: Събитието Delete възниква всеки път, когато записът се изтрие от таблицата.
Типове задействания в езика на структурираните заявки
Следват шестте типа задействания, използвани в езика на структурираните заявки:
1. СЛЕД ВМЪКВАНЕ Тригер:
Тригерът след вмъкване се извиква в SQL, след като записите се вмъкнат в таблицата.
2. Задействане СЛЕД АКТУАЛИЗИРАНЕ:
Тригерът след актуализиране се извиква в SQL след актуализиране на съществуващите записи в таблицата.
3. Задействане СЛЕД ИЗТРИВАНЕ:
Тригерът след изтриване се извиква в SQL, след като записът бъде изтрит от таблицата.
4. ПРЕДИ ВМЪКВАНЕ Тригер:
Тригерът преди вмъкване се извиква в SQL, преди записите да бъдат вмъкнати в таблицата.
5. Задействане ПРЕДИ АКТУАЛИЗИРАНЕ:
Тригерът преди актуализиране се извиква в SQL, преди съществуващите записи в таблицата да бъдат актуализирани.
6. ПРЕДИ ИЗТРИВАНЕ Тригер:
Тригерът преди изтриване се извиква в SQL, преди записът да бъде изтрит от таблицата.
Синтаксис на тригера в SQL:
CREATE TRIGGER Trigger_Name
[BEFORE | AFTER] [Insert | Update | Delete]
ON [Table_Name]
[FOR EACH ROW | FOR EACH COLUMN]
AS
Set of SQL Statement
- В синтаксиса на тригера трябва да дефинираме името на тригера непосредствено след ключовата дума CREATE TRIGGER в синтаксиса.
- След името на тригера трябва да дефинираме кое задействане искаме да извикаме, ключовата дума преди задействане или ключовата дума след задействане с името на събитието.
- След това трябва да споменем името на таблицата, на която е възникнало задействането.
- След името на таблицата трябва да дефинираме тригера на ниво ред или колона.
- И в крайна сметка трябва да напишем SQL израза, който действа върху случващите се събития.
Пример за тригер в SQL
За да разберем концепцията за тригер в SQL, трябва да създадем таблица, върху която да се изпълни тригера.
Следната заявка създава таблицата Student в SQL базата данни.
CREATE TABLE Student(
Student_rollno INT NOT NULL PRIMARY KEY,
FirstName varchar(40),
English_Marks INT,
Physics_Marks INT,
Chemistry_Marks INT,
Biology_Marks INT,
Maths_Marks INT,
Total_Marks INT,
Percentage INT);
Следната заявка показва структурата на таблицата Student:
DESC студент;
Поле | Тип | NULL | Ключ | По подразбиране | Допълнително |
Ученик_RollNo | INT | НЕ | PRI | NULL | |
Име | Варчар(40) | ДА | NULL | ||
English_Marks | INT | ДА | NULL | ||
Физични_маркировки | INT | ДА | NULL | ||
Chemistry_Marks | INT | ДА | NULL | ||
Биологични_знаци | INT | ДА | NULL | ||
Математически_Оценки | INT | ДА | NULL | ||
Общо_маркове | INT | ДА | NULL | ||
Процент | INT | ДА | NULL |
Следната заявка задейства тригера преди вмъкването на записа на ученика в таблицата:
CREATE TRIGGER Student _Marks
BEFORE INSERT
ON
Student
FOR EACH ROW
SET new.Total_Marks = new.English_Marks + new.Physics_Marks + new.Chemistry_Marks + new.Biology_Marks + new.Maths_Marks,
new.Percentage = ( new.Total_Marks / 500) * 100;
Следните заявки вмъкват записа в таблицата Student.
INSERT INTO Student (Student_RollNo, First_Name, English_Marks, Physics_Marks, Chemistry_Marks,Biology_Marks, Maths_Marks, Total_Marks, Percentage) VALUES ( 1, ‘Raman’, 90, 80, 75, 70 ,92, 0, 0);
За да проверите изхода на горния оператор INSERT, трябва да въведете следния оператор SELECT:
SELECT * FROM Student
Изход:
Ученик_RollNo | Име | English_Marks | Физични_маркировки | Chemistry_Marks | Биологични_знаци | Математически_Оценки | Общо_маркове | Процент |
1 | Раман | 90 | 80 | 75 | 70 | 92 | 407 | 81 |
Предимства на тригерите в SQL
Следват трите основни предимства на тригерите в езика на структурираните заявки:
- SQL предоставя алтернативен начин за поддържане на целостта на данните и препратките в таблиците.
- Задействанията помагат при автоматичното изпълнение на планираните задачи.
- Те улавят грешките в слоя на базата данни на различни бизнеси.
- Те позволяват на потребителите на базата данни да проверяват стойности преди вмъкване и актуализиране.
Недостатъци на тригерите в SQL
Следват основните недостатъци на тригерите в езика на структурираните заявки:
- Те не са компилирани.
- Не е възможно да се намерят и отстранят грешките в тригерите.
- Ако използваме сложния код в тригера, това кара приложението да работи по-бавно.
- Задействането увеличава високото натоварване на системата на базата данни.