sql >> Database teknologi >  >> RDS >> Database

Hvad er triggere i SQL, og hvordan implementeres dem?

En trigger i SQL er en procedurekode, der automatisk udføres som svar på bestemte hændelser i en specificeret tabel. Det er vigtigt at forstå, hvordan disse små koder gør så stor en forskel i databasens ydeevne. I denne artikel vil du lære, hvordan du implementerer triggere sammen med eksempler.

Følgende emner vil blive dækket i denne artikel:

  • Hvad er en trigger?
  • Syntaks og eksempel
  • Betjening i Triggers
  • Fordel og ulempe

Hvad er en trigger?

Triggere er de SQL-koder, der automatisk udføres som svar på bestemte hændelser på en bestemt tabel. Disse bruges til at opretholde integriteten af ​​dataene. En trigger i SQL fungerer på samme måde som en trigger i den virkelige verden. For eksempel, når der trykkes på pistolens aftrækker, affyres en kugle. Vi ved alle dette, men hvordan er det relateret til Triggers i SQL? For at forstå dette, lad os overveje en hypotetisk situation.

John er marketingmedarbejder i en virksomhed. Når en ny kundedata indtastes i virksomhedens database, skal han sende velkomstbeskeden til hver ny kunde. Hvis det er en eller to kunder, kan John gøre det manuelt, men hvad hvis antallet er mere end tusind? I sådanne scenarier kommer triggere godt med.

Således kan John nu nemt oprette en trigger, som automatisk sender en velkomstmail til de nye kunder, når deres data er indtastet i databasen. Så jeg håber, du er klar med introduktionen af ​​Triggers i SQL.

Husk altid, at der ikke kan være to triggere med lignende handlingstid og begivenhed for én tabel. For eksempel kan vi ikke have to BEFORE UPDATE-udløsere for en tabel. Men vi kan have en FØR OPDATERING og en FØR INDSÆT trigger eller en FØR OPDATERING og en EFTER OPDATERING trigger.

Før vi dykker yderligere ned i de grundlæggende principper for triggere, vil jeg foreslå dig at forstå begreberne SQL Basics og Normalization, så du får et bedre greb om Triggers i SQL.

Syntaks og eksempel

Lad os nu se på syntaksen for en trigger.

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

Lad mig nu nedbryde denne syntaks og forklare hver enkelt del i detaljer.

  • Opret trigger
    Disse to nøgleord bruges til at angive, at en triggerblok vil blive erklæret.
  • Trigger_Name
    Det angiver navnet på udløseren. Triggernavnet skal være unikt og bør ikke gentages.
  • ( Før | Efter )
    Dette angiver, hvornår triggeren vil blive udført. Den fortæller os det tidspunkt, hvor triggeren initieres, dvs. enten før eller efter den igangværende begivenhed.
  • Før udløsere bruges til at opdatere eller validere postværdier, før de gemmes i databasen.
  • Efter triggers bruges til at få adgang til feltværdier, der er indstillet af systemet, og til at udføre ændringer i andre poster. De poster, der aktiverer efter-triggeren, er skrivebeskyttede. Vi kan ikke bruge After trigger, hvis vi ønsker at opdatere en post, fordi det vil føre til skrivebeskyttet fejl.
  • [ Indsæt | Opdatering | Slet ]
    Dette er DML-operationerne, og vi kan bruge en af ​​dem i en given trigger.
  • [ Tabel_navn ]
    Vi skal nævne det tabelnavn, som triggeren anvendes på. Glem ikke at bruge nøgleord og sørg også for, at den valgte tabel er til stede i databasen.
  • [ for hver række | for hver kolonne ]
    1. Trigger på rækkeniveau udføres før eller efter en hvilken som helst kolonneværdi i en række ændringer
    2. Kolonneniveauudløser udføres før eller efter den angivne kolonne ændringer
  • [ trigger_body]
    Den består af forespørgsler, der skal udføres, når triggeren kaldes.

Så dette handlede om en simpel trigger. Men vi kan også oprette en indlejret trigger, der kan udføre multiprocesser. Det er også meget vigtigt at håndtere det og afslutte det på det rigtige tidspunkt. Hvis vi ikke afslutter triggeren ordentligt, kan det føre til en uendelig løkke.

Du spekulerer måske på, i hvilket scenarie vi kan bruge den indlejrede trigger. I stedet for at give dig et skræddersyet svar, lad mig dele et scenarie med dig, som vil hjælpe dig med at forstå den indlejrede trigger på en bedre måde. I forlængelse af det tidligere scenarie sendte John en e-mail for hver ny kunde, der blev tilføjet til virksomhedens database. Hvad nu, hvis han ønsker at holde styr på antallet af kunder, som e-mailen blev sendt til? Nu skal John oprette en indlejret trigger for at holde styr på optællingen sammen med at sende en e-mail.

Så det handlede om syntaksen for triggere, lad os nu prøve at implementere et eksempel på triggere i SQL.

Eksempel på trigger:

I nedenstående trigger forsøger vi at beregne procentdelen af ​​eleven, så snart hans detaljer er opdateret til databasen.

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

Her er "NYE" søgeord refererer til den række, der bliver påvirket.

Handlinger i triggere

Vi kan udføre mange operationer ved hjælp af triggere. Nogle kan være enkle og nogle kan være lidt komplekse, men når vi først gennemgår forespørgslen, er den let at forstå.

  • SLIP EN Trigger
DROP TRIGGER trigger name;
  • Vis en trigger

Koden nedenfor viser alle de triggere, der er til stede.

SHOW TRIGGERS;

Nedenstående kode vil vise alle de triggere, der er til stede i en bestemt database.

SHOW TRIGGERS
IN database_name;

Eksempel:

SHOW TRIGGERS IN edureka;

I ovenstående eksempel vil alle de triggere, der er til stede i databasen ved navn Edureka, blive vist.

Vi ser også på nogle større varianter af de triggere, der er Før indsættelse og Efter indsættelse. Vi har allerede set en trigger i eksemplet. Men lad os ved hjælp af tabellen se, hvordan det præcist virker.

Som vi allerede har forstået, hvordan man opretter en trigger, lad os nu forstå de to varianter af triggeren, nemlig Før indsættelse og Efter indsættelse. for at implementere dem, lad os oprette en elevtabel med forskellige kolonner som vist nedenfor:

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

Nu, hvis vi udfører denne forespørgsel, får vi følgende tabel.

Lad os prøve at bruge den første variant, dvs. Før indsættelse

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

Her, når vi automatisk indsætter data i elevtabellen, vil triggeren blive aktiveret. Udløseren tilføjer 100 til kolonnen med karakterer i elevkolonnen.

Lad os nu bruge den anden variant, dvs. Efter Indsæt

For at bruge denne variant har vi brug for en tabel mere, dvs. Procent, hvor udløseren vil gemme resultaterne. Brug nedenstående kode til at oprette procenttabellen.

create table Final_mark(
per int );

Lad os nu bruge triggeren efter indsættelse

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

Her, når vi indsætter data i tabellen, total_mark trigger vil gemme resultatet i Final_mark-tabellen.

Det var alt om operationen på triggere, lad os nu gå videre og se på dens fordele og ulemper.

Fordele og ulemper ved triggere

Fordele

  • Tvinger sikkerhed godkendelser på bordet, der er til stede i databasen
  • Triggere giver en anden måde at kontrollere dataintegriteten
  • Modarbejder ugyldig udvekslinger
  • Triggere håndterer fejl fra databaselaget
  • Normalt kan udløsere være nyttige til eftersyn af dataene ændringer i tabeller
  • Triggere giver en alternativ måde at køre splanlagte opgaver på . Ved at bruge triggere behøver vi ikke at vente på, at de planlagte hændelser kører, fordi triggerne aktiveres automatisk før eller efter en ændring af dataene i en tabel

Ulempe s

  • Triggere kan kun give udvidede valideringer , dvs. ikke alle slags valideringer. Til simple valideringer kan du bruge begrænsningerne NOT NULL, UNIQUE, CHECK og FOREIGN KEY
  • Udløsere kan øge overhead af databasen
  • Udløsere kan være svære at fejlfinde fordi de køres automatisk i databasen, som muligvis ikke er usynlige for klientapplikationerne

Dette bringer os til slutningen af ​​denne Triggers in SQL-artikel. Jeg håber, du forstod begreberne Triggers.

Hvis du ønsker at lære mere om MySQL og lære denne open source relationsdatabase at kende, så tjek vores MySQL DBA Certification Training, som kommer med instruktørledet live træning og ægte -livsprojekterfaring. Denne træning vil hjælpe dig med at forstå MySQL i dybden og hjælpe dig med at opnå beherskelse over emnet.

Har du et spørgsmål til os? Nævn det i kommentarfeltet i denne Triggere i SQL, så vender vi tilbage til dig.


  1. Hvad er den bedste måde at migrere en Django DB fra SQLite til MySQL?

  2. Kør en PostgreSQL .sql-fil ved hjælp af kommandolinjeargumenter

  3. Node.js og Microsoft SQL Server

  4. SQL Server-transaktionsloggen, del 3:Grundlæggende logføring