sql >> Databasteknik >  >> RDS >> Database

Vad är triggers i SQL och hur implementerar man dem?

En trigger i SQL är en procedurkod som exekveras automatiskt som svar på vissa händelser i en specificerad tabell. Det är viktigt att förstå hur dessa små koder gör så stor skillnad i databasprestanda. I den här artikeln kommer du att lära dig hur du implementerar utlösare tillsammans med exempel.

Följande ämnen kommer att behandlas i den här artikeln:

  • Vad är en utlösare?
  • Syntax och exempel
  • Användning i utlösare
  • Fördel och nackdel

Vad är en utlösare?

Triggers är SQL-koder som automatiskt exekveras som svar på vissa händelser i en viss tabell. Dessa används för att upprätthålla dataintegriteten. En trigger i SQL fungerar på samma sätt som en verklig trigger. Till exempel, när pistolavtryckaren trycks in avfyras en kula. Vi vet alla detta, men hur är detta relaterat till triggers i SQL? För att förstå detta låt oss överväga en hypotetisk situation.

John är marknadsansvarig på ett företag. När en ny kunddata läggs in i företagets databas måste han skicka ett välkomstmeddelande till varje ny kund. Om det är en eller två kunder kan John göra det manuellt, men vad händer om antalet är mer än tusen? I ett sådant scenario kommer triggers väl till pass.

Därför kan John nu enkelt skapa en utlösare som automatiskt skickar ett välkomstmail till de nya kunderna när deras data matas in i databasen. Så jag hoppas att du är tydlig med introduktionen av triggers i SQL.

Kom alltid ihåg att det inte kan finnas två utlösare med liknande åtgärdstid och händelse för en tabell. Till exempel kan vi inte ha två BEFORE UPDATE-utlösare för en tabell. Men vi kan ha en INNAN UPPDATERING och en INNAN INSERT utlösare, eller en INNAN UPPDATERING och en EFTER UPPDATERING utlösare.

Innan vi dyker mer in i grunderna för triggers skulle jag föreslå att du förstår begreppen SQL Basics och Normalization så att du får ett bättre grepp om Triggers i SQL.

Syntax och exempel

Låt oss nu titta på syntaxen för en utlösare.

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

Låt mig nu bryta ner den här syntaxen och förklara varje del i detalj.

  • Skapa utlösare
    Dessa två nyckelord används för att specificera att ett triggerblock kommer att deklareras.
  • Trigger_Name
    Den anger namnet på utlösaren. Utlösarens namn måste vara unikt och bör inte upprepas.
  • ( Före | Efter )
    Detta anger när triggern kommer att exekveras. Den talar om för oss vid vilken tidpunkt utlösningen initieras, dvs. antingen före eller efter den pågående händelsen.
  • Före utlösare används för att uppdatera eller validera postvärden innan de sparas i databasen.
  • Efter utlösare används för att komma åt fältvärden som ställs in av systemet och för att utföra ändringar i andra poster. Posterna som aktiverar efterutlösaren är skrivskyddade. Vi kan inte använda After trigger om vi vill uppdatera en post eftersom det kommer att leda till ett skrivskyddat fel.
  • [ Infoga | Uppdatera | Ta bort ]
    Det här är DML-operationerna och vi kan använda någon av dem i en given trigger.
  • [ Tabell_Name ]
    Vi måste nämna tabellnamnet som utlösaren används på. Glöm inte att använda nyckelord och se även till att den valda tabellen finns i databasen.
  • [ för varje rad | för varje kolumn ]
    1. Utlösare på radnivå exekveras före eller efter valfritt kolumnvärde i en rad ändringar
    2. Kolumnnivåutlösaren exekveras före eller efter den specificerade kolumnen ändringar
  • trigger_body]
    Den består av frågor som måste köras när triggern anropas.

Så det här handlade om en enkel trigger. Men vi kan också skapa en kapslad trigger som kan utföra flera processer. Det är också mycket viktigt att hantera det och avsluta det vid rätt tidpunkt. Om vi ​​inte avslutar triggern ordentligt kan det leda till en oändlig loop.

Du kanske undrar i vilket scenario vi kan använda den kapslade utlösaren. Istället för att ge dig ett skräddarsytt svar låt mig dela ett scenario med dig, som hjälper dig att förstå den kapslade utlösaren på ett bättre sätt. För att fortsätta från det tidigare scenariot skickade John ett e-postmeddelande för varje ny kund som lades till i företagets databas. Tänk om han nu vill hålla reda på antalet kunder som e-postmeddelandet skickades till? Nu måste John skapa en kapslad utlösare för att hålla koll på räkningen tillsammans med att skicka ett e-postmeddelande.

Så det handlade om syntaxen för triggers, låt oss nu försöka implementera ett exempel på triggers i SQL.

Exempel på utlösare:

I triggern nedan försöker vi beräkna andelen eleven så snart hans uppgifter uppdateras till databasen.

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

Här "NYA" nyckelord hänvisar till raden som påverkas.

Åtgärder i utlösare

Vi kan utföra många operationer med hjälp av triggers. Vissa kan vara enkla och vissa kan vara lite komplicerade, men när vi går igenom frågan är det lätt att förstå.

  • SLÄPP EN utlösare
DROP TRIGGER trigger name;
  • Visa en utlösare

Koden nedan visar alla triggers som finns.

SHOW TRIGGERS;

Koden nedan kommer att visa alla triggers som finns i en viss databas.

SHOW TRIGGERS
IN database_name;

Exempel:

SHOW TRIGGERS IN edureka;

I exemplet ovan kommer alla triggers som finns i databasen med namnet Edureka att visas.

Vi tittar också på några större varianter av triggers som är Before insert och After insert. Vi har redan sett en trigger i exemplet. Men med hjälp av tabellen kan vi se hur exakt detta fungerar.

Eftersom vi redan har förstått hur man skapar en utlösare, låt oss nu förstå de två varianterna av utlösaren, de är Före infogning och Efter infogning. för att implementera dem, låt oss skapa en elevtabell med olika kolumner enligt nedan:

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)
);

Om vi ​​nu kör den här frågan får vi följande tabell.

Låt oss försöka använda den första varianten, dvs. Innan infogning

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

Här när vi infogar data i elevtabellen automatiskt kommer triggern att anropas. Utlösaren lägger till 100 i poängkolumnen i elevkolumnen.

Låt oss nu använda den andra varianten, dvs. Efter Infoga

För att använda denna variant behöver vi ytterligare en tabell, dvs. Procentandel där utlösaren kommer att lagra resultaten. Använd koden nedan för att skapa procenttabellen.

create table Final_mark(
per int );

Låt oss nu använda triggern efter infogning

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

Här när vi infogar data i tabellen total_mark trigger kommer att lagra resultatet i Final_mark-tabellen.

Det var allt om operationen på triggers, låt oss nu gå vidare och titta på dess fördelar och nackdelar.

Fördelar och nackdelar med utlösare

Fördelar

  • Tvinga fram säkerhet godkännanden på bordet som finns i databasen
  • Triggers ger ett annat sätt att kontrollera dataintegriteten
  • Ogiltig motverkan utbyten
  • Utlösare hanterar fel från databaslagret
  • Normalt kan utlösare vara användbara för att inspektera data ändringar i tabeller
  • Triggers ger ett alternativt sätt att köra sschemalagda uppgifter . Med hjälp av utlösare behöver vi inte vänta på att de schemalagda händelserna ska köras eftersom utlösarna anropas automatiskt före eller efter en ändring av data i en tabell

Nackdel s

  • Triggers kan bara ge utökade valideringar , det vill säga inte alla typer av valideringar. För enkla valideringar kan du använda begränsningarna NOT NULL, UNIQUE, CHECK och FOREIGN KEY
  • Utlösare kan öka overheaden av databasen
  • Triggers kan vara svåra att felsöka eftersom de körs automatiskt i databasen, vilket kanske inte är osynligt för klientapplikationerna

Detta tar oss till slutet av denna Triggers in SQL-artikel. Jag hoppas att du förstod begreppen Triggers.

Om du vill lära dig mer om MySQL och lära känna denna relationsdatabas med öppen källkod, kolla in vår MySQL DBA-certifieringsutbildning som kommer med instruktörsledd liveutbildning och verklig -livsprojekterfarenhet. Den här utbildningen hjälper dig att förstå MySQL på djupet och hjälper dig att behärska ämnet.

Har du en fråga till oss? Nämn det i kommentarsfältet i denna Triggers i SQL så återkommer vi till dig.


  1. biginteger array-funktioner

  2. Hur INTERSECT fungerar i SQL Server

  3. Jag kan inte få mitt inloggningsformulär att ansluta interagera korrekt med mySQL-databasen

  4. Hur man ställer in statusfältsfärg i SSMS för olika SQL Server-instanser - SQL Server / TSQL självstudie del 6