Database
 sql >> база данни >  >> RDS >> Database

Тригер в SQL

В тази статия ще научим за концепцията на тригера в 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

Следват трите основни предимства на тригерите в езика на структурираните заявки:

  1. SQL предоставя алтернативен начин за поддържане на целостта на данните и препратките в таблиците.
  2. Задействанията помагат при автоматичното изпълнение на планираните задачи.
  3. Те улавят грешките в слоя на базата данни на различни бизнеси.
  4. Те позволяват на потребителите на базата данни да проверяват стойности преди вмъкване и актуализиране.

Недостатъци на тригерите в SQL

Следват основните недостатъци на тригерите в езика на структурираните заявки:

  1. Те не са компилирани.
  2. Не е възможно да се намерят и отстранят грешките в тригерите.
  3. Ако използваме сложния код в тригера, това кара приложението да работи по-бавно.
  4. Задействането увеличава високото натоварване на системата на базата данни.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вашият Salesforce драйвер поддържа ли групови действия?

  2. Въведение в Python SQL библиотеки

  3. Грешка ORA-65048 при промяна на потребителска парола в контейнерна база данни (CDB)

  4. Ролята на DBA в NoSQL

  5. Как да добавя чужд ключ в SQL?