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

Какво представляват тригерите в SQL и как да ги приложим?

Задействането в SQL е процедурен код, който се изпълнява автоматично в отговор на определени събития в определена таблица. Важно е да се разбере как тези малки кодове правят такава огромна разлика в производителността на базата данни. В тази статия ще научите как да прилагате тригери заедно с примери.

Следните теми ще бъдат обхванати в тази статия:

  • Какво е тригер?
  • Синтаксис и пример
  • Операция в тригери
  • Предимство и недостатък

Какво е тригер?

Тригерите са SQL кодовете, които се изпълняват автоматично в отговор на определени събития в определена таблица. Те се използват за поддържане на целостта на данните. Тригерът в SQL работи подобно на тригер в реалния свят. Например, при натискане на спусъка на пистолета се изстрелва куршум. Всички знаем това, но как това е свързано с тригерите в SQL? За да разберем това, нека разгледаме хипотетична ситуация.

Джон е маркетинговият служител в една компания. Когато нов клиент бъде въведен в базата данни на компанията, той трябва да изпрати съобщение за добре дошли на всеки нов клиент. Ако е един или двама клиенти, Джон може да го направи ръчно, но какво ще стане, ако броят е повече от хиляда? Е, в такъв сценарий тригерите са полезни.

По този начин сега Джон може лесно да създаде тригер, който автоматично ще изпрати имейл за добре дошли до новите клиенти, след като техните данни бъдат въведени в базата данни. Така че се надявам, че сте наясно с въвеждането на тригери в SQL.

Винаги помнете, че не може да има два тригера с подобно време на действие и събитие за една таблица. Например, не можем да имаме два тригера BEFORE UPDATE за таблица. Но можем да имаме ПРЕДИ АКТУАЛИЗИРАНЕ и ПРЕДИ ВМЕСВАНЕ тригер или ПРЕДИ АКТУАЛИЗИРАНЕ и СЛЕД АКТУАЛИЗИРАНЕ задействане.

Преди да се потопим по-подробно в основите на тригерите, бих ви предложил да разберете концепциите за основите на SQL и нормализирането, за да получите по-добър контрол върху тригерите в SQL.

Синтаксис и пример

Нека сега да разгледаме синтаксиса на тригера.

Create Trigger Trigger_Name
(Before | After)  [ Insert | Update | Delete]
on [Table_Name]
[ for each row | for each column ]
[ trigger_body ]

Сега нека разбия този синтаксис и да обясня всяка част подробно.

  • Създаване на тригер
    Тези две ключови думи се използват, за да укажат, че ще бъде деклариран тригер блок.
  • Име на задействане
    Той определя името на тригера. Името на тригера трябва да е уникално и не трябва да се повтаря.
  • ( Преди | След )
    Това указва кога тригерът ще бъде изпълнен. Той ни казва времето, в което се инициира задействането, т.е. преди текущото събитие или след него.
  • Преди задействания се използват за актуализиране или валидиране на стойностите на записите, преди да бъдат записани в базата данни.
  • След задействания се използват за достъп до стойности на полета, които са зададени от системата, и за извършване на промени в други записи. Записите, които активират след тригера, са само за четене. Не можем да използваме задействане After, ако искаме да актуализираме запис, защото това ще доведе до грешка само за четене.
  • [ Вмъкване | Актуализация | Изтриване ]
    Това са DML операциите и можем да използваме всяка от тях в даден тригер.
  • включено [ Име_на таблица ]
    Трябва да споменем името на таблицата, върху която се прилага тригерът. Не забравяйте да използвате on ключова дума и също така се уверете, че избраната таблица присъства в базата данни.
  • [ за всеки ред | за всяка колона ]
    1. Задействането на ниво ред се изпълнява преди или след която и да е стойност на колона на ред промени
    2. Тригерът на ниво колона се изпълнява преди или след посочената колона промени
  • [ trigger_body]
    Състои се от заявки, които трябва да се изпълнят при извикване на тригера.

Така че всичко беше свързано с обикновен тригер. Но можем също да създадем вложен тригер, който може да извършва многопроцеси. Също така е много важно да се справите с него и да го прекратите в подходящия момент. Ако не приключим правилно спусъка, това може да доведе до безкраен цикъл.

Може би се чудите в кой сценарий можем да използваме вложения тригер. Вместо да ви дам персонализиран отговор, позволете ми да споделя с вас сценарий, който ще ви помогне да разберете вложеното задействане по по-добър начин. Продължавайки от предишния сценарий, Джон изпраща имейл за всеки нов клиент, който е добавен към базата данни на компанията. Сега, какво ще стане, ако той иска да следи броя на клиентите, на които е изпратен имейлът? Сега Джон трябва да създаде вложен тригер, за да следи броя, заедно с изпращането на имейл.

Така че това беше всичко за синтаксиса на тригерите, нека сега се опитаме да приложим пример за тригери в SQL.

Пример за Trigger:

В долния тригер се опитваме да изчислим процента на ученика веднага щом данните му бъдат актуализирани в базата данни.

CREATE TRIGGER sample_trigger
before INSERT
ON student
FOR EACH ROW
SET new.total = new.marks/6;

Тук „НОВО” ключова дума се отнася до реда, който е засегнат.

Операции в тригери

Можем да извършваме много операции с помощта на тригери. Някои може да са прости, а други да са малко сложни, но веднъж, ако преминем през заявката, е лесно да се разбере.

  • ПУСКАНЕ НА СПУСКАНЕ
DROP TRIGGER trigger name;
  • Показване на задействане

Кодът по-долу ще покаже всички налични задействания.

SHOW TRIGGERS;

Кодът по-долу ще покаже всички тригери, които присъстват в конкретна база данни.

SHOW TRIGGERS
IN database_name;

Пример:

SHOW TRIGGERS IN edureka;

В горния пример ще бъдат показани всички тригери, които присъстват в базата данни с име Edureka.

Разглеждаме и някои основни варианти на тригерите, които са Преди вмъкване и След вмъкване. Вече видяхме тригер в примера. Но с помощта на таблицата нека видим как точно работи това.

Тъй като вече разбрахме как да създадем тригер, сега нека разберем двата варианта на тригера, които са Преди вмъкване и След вмъкване. за да ги приложим, нека създадем таблица за ученици с различни колони, както е показано по-долу:

CREATE TABLE Student(
studentID INT NOT NULL AUTO_INCREMENT,
FName VARCHAR(20),
LName VARCHAR(20),
Address VARCHAR(30),
City VARCHAR(15),
Marks INT,
PRIMARY KEY(studentID)
);
>

Сега, ако изпълним тази заявка, получаваме следната таблица.

Нека се опитаме да използваме първия вариант, т.е. Преди вмъкване

CREATE TRIGGER calculate
before INSERT 
ON student
FOR EACH ROW
SET new.marks = new.marks+100;

Тук, когато вмъкнем данни в таблицата на учениците автоматично, тригерът ще бъде извикан. Спусъкът ще добави 100 към колоната за оценки в колоната за ученик.

Сега нека използваме втория вариант, т.е. След Вмъкване

За да използваме този вариант, се нуждаем от още една таблица, т.е. Процент, където тригерът ще съхранява резултатите. Използвайте кода по-долу, за да създадете процентната таблица.

create table Final_mark(
per int );

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

CREATE TRIGGER total_mark
after insert 
ON student
FOR EACH ROW
insert into Final_mark values(new.marks);

Тук, когато вмъкваме данни в таблицата, total_mark тригер ще съхрани резултата в таблицата Final_mark.

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

Предимства и недостатъци на тригерите

Предимства

  • Принудителна сигурност одобрения на таблицата, които присъстват в базата данни
  • Задействанията предоставят друг начин за проверка на целостта на данните
  • Противодействие на невалидно обмен
  • Задейства обработка на грешки от слоя на базата данни
  • Обикновено тригерите могат да бъдат полезни за проверка на данните промени в таблиците
  • Задействанията дават алтернативен начин за изпълнение на спланирани задачи . Използвайки тригери, не е нужно да чакаме планираните събития да се изпълнят, тъй като тригерите се извикват автоматично преди или след като се направи промяна на данните в таблица

Недостатък с

  • Задействанията могат да предоставят само разширени проверки т.е. не всички видове валидации. За прости проверки можете да използвате ограниченията NOT NULL, UNIQUE, CHECK и FOREIGN KEY
  • Задействанията може да увеличат режийните на базата данни
  • Задействанията може да са трудни заотстраняване тъй като те се изпълняват автоматично в базата данни, което може да не е невидимо за клиентските приложения

Това ни довежда до края на тази статия за тригери в SQL. Надявам се, че сте разбрали концепциите на Triggers.

Ако искате да научите повече за MySQL и да опознаете тази релационна база данни с отворен код, разгледайте нашето обучение за сертифициране на MySQL DBA, което идва с обучение на живо от инструктор и реално - житейски опит в проекти. Това обучение ще ви помогне да разберете MySQL в дълбочина и ще ви помогне да постигнете майсторство по темата.

Имате въпрос към нас? Моля, споменете го в секцията за коментари на тези тригери в SQL и ние ще се свържем с вас.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Специални острови

  2. Понякога МОЖЕТЕ да увеличите колона на място

  3. SQL справочник за начинаещи

  4. SQL MIN() за начинаещи

  5. Кой е най-бързият начин за изчисляване на медианата?