sql >> Database >  >> RDS >> Database

Wat zijn triggers in SQL en hoe implementeer je ze?

Een trigger in SQL is een procedurele code die automatisch wordt uitgevoerd als reactie op bepaalde gebeurtenissen in een gespecificeerde tabel. Het is belangrijk om te begrijpen hoe deze kleine codes zo'n enorm verschil maken in de databaseprestaties. In dit artikel leer je hoe je triggers implementeert, samen met voorbeelden.

De volgende onderwerpen komen in dit artikel aan bod:

  • Wat is een trigger?
  • Syntaxis en voorbeeld
  • Bewerking in triggers
  • Voor- en nadeel

Wat is een trigger?

Triggers zijn de SQL-codes die automatisch worden uitgevoerd als reactie op bepaalde gebeurtenissen in een bepaalde tabel. Deze worden gebruikt om de integriteit van de gegevens te behouden. Een trigger in SQL werkt vergelijkbaar met een real-world trigger. Wanneer bijvoorbeeld de trekker wordt overgehaald, wordt er een kogel afgevuurd. We weten dit allemaal, maar hoe is dit gerelateerd aan Triggers in SQL? Laten we, om dit te begrijpen, een hypothetische situatie bekijken.

John is de marketingfunctionaris in een bedrijf. Wanneer een nieuwe klantgegevens worden ingevoerd in de database van het bedrijf, moet hij het welkomstbericht naar elke nieuwe klant sturen. Als het een of twee klanten zijn, kan John het handmatig doen, maar wat als het aantal meer dan duizend is? In zo'n scenario komen triggers goed van pas.

Zo kan John nu gemakkelijk een trigger maken die automatisch een welkomstmail naar de nieuwe klanten stuurt zodra hun gegevens in de database zijn ingevoerd. Dus ik hoop dat je duidelijk bent met de introductie van Triggers in SQL.

Onthoud altijd dat er geen twee triggers kunnen zijn met dezelfde actietijd en gebeurtenis voor één tafel. We kunnen bijvoorbeeld niet twee BEFORE UPDATE-triggers voor een tabel hebben. Maar we kunnen een VOOR UPDATE en een VOOR INSERT trigger, of een VOOR UPDATE en een NA UPDATE trigger.

Voordat we dieper ingaan op de basisprincipes van triggers, raad ik je aan om de concepten van SQL Basics en Normalization te begrijpen, zodat je een betere grip krijgt op Triggers in SQL.

Syntaxis en voorbeeld

Laten we nu eens kijken naar de syntaxis van een trigger.

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

Laat me nu deze syntaxis ontleden en elk onderdeel in detail uitleggen.

  • Trigger maken
    Deze twee trefwoorden worden gebruikt om aan te geven dat een triggerblok wordt gedeclareerd.
  • Trigger_Name
    Het specificeert de naam van de trigger. De triggernaam moet uniek zijn en mag niet worden herhaald.
  • ( Vóór | Na )
    Dit specificeert wanneer de trigger wordt uitgevoerd. Het vertelt ons het tijdstip waarop de trigger wordt gestart, d.w.z. vóór of na de lopende gebeurtenis.
  • Vóór triggers worden gebruikt om recordwaarden bij te werken of te valideren voordat ze in de database worden opgeslagen.
  • Na triggers worden gebruikt om toegang te krijgen tot veldwaarden die door het systeem zijn ingesteld en om wijzigingen in andere records door te voeren. De records die de after-trigger activeren, zijn alleen-lezen. We kunnen After-trigger niet gebruiken als we een record willen bijwerken, omdat dit tot een alleen-lezen-fout leidt.
  • [ Invoegen | Bijwerken | Verwijderen ]
    Dit zijn de DML-bewerkingen en we kunnen ze allebei in een bepaalde trigger gebruiken.
  • op [ Table_Name ]
    We moeten de tabelnaam vermelden waarop de trigger wordt toegepast. Vergeet niet op . te gebruiken trefwoord en zorg er ook voor dat de geselecteerde tabel aanwezig is in de database.
  • [ voor elke rij | voor elke kolom ]
    1. Trigger op rijniveau wordt uitgevoerd voor of na elke kolomwaarde van een rij wijzigingen
    2. Trigger op kolomniveau wordt uitgevoerd voor of na de opgegeven kolom wijzigingen
  • [ trigger_body]
    Het bestaat uit query's die moeten worden uitgevoerd wanneer de trigger wordt aangeroepen.

Dit ging dus allemaal over een simpele trigger. Maar we kunnen ook een geneste trigger maken die meerdere processen kan uitvoeren. Ook het afhandelen en op het juiste moment beëindigen ervan is erg belangrijk. Als we de trigger niet goed beëindigen, kan dit leiden tot een oneindige lus.

Je vraagt ​​je misschien af ​​in welk scenario we de geneste trigger kunnen gebruiken. In plaats van je een op maat gemaakt antwoord te geven, wil ik je een scenario met je delen, dat je zal helpen de geneste trigger op een betere manier te begrijpen. Voortbordurend op het eerdere scenario stuurde John een e-mail voor elke nieuwe klant die aan de database van het bedrijf werd toegevoegd. Wat als hij nu het aantal klanten wil bijhouden naar wie de e-mail is verzonden? Nu moet John een geneste trigger maken om de telling bij te houden, samen met het verzenden van een e-mail.

Dus dat was alles over de syntaxis van triggers, laten we nu proberen een voorbeeld van triggers in SQL te implementeren.

Voorbeeld voor trigger:

In de onderstaande trigger proberen we het percentage van de student te berekenen zodra zijn gegevens zijn bijgewerkt naar de database.

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

Hier de "NIEUWE" trefwoord verwijst naar de rij die wordt beïnvloed.

Bewerkingen in Triggers

We kunnen veel bewerkingen uitvoeren met behulp van triggers. Sommige zijn misschien eenvoudig en sommige zijn misschien een beetje ingewikkeld, maar als we eenmaal door de vraag gaan, is het gemakkelijk te begrijpen.

  • LAAG een trigger los
DROP TRIGGER trigger name;
  • Een trigger weergeven

De onderstaande code geeft alle aanwezige triggers weer.

SHOW TRIGGERS;

De onderstaande code toont alle triggers die aanwezig zijn in een bepaalde database.

SHOW TRIGGERS
IN database_name;

Voorbeeld:

SHOW TRIGGERS IN edureka;

In het bovenstaande voorbeeld worden alle triggers weergegeven die aanwezig zijn in de database met de naam Edureka.

We kijken ook naar enkele belangrijke varianten van de triggers, namelijk Voor invoegen en Na invoegen. We hebben in het voorbeeld al een trigger gezien. Maar laten we met behulp van de tabel zien hoe dit precies werkt.

Omdat we al begrepen hebben hoe we een trigger moeten maken, gaan we nu de twee varianten van de trigger begrijpen, namelijk Voor invoegen en Na invoegen. laten we, om ze te implementeren, een studententabel maken met verschillende kolommen, zoals hieronder weergegeven:

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

Als we nu deze query uitvoeren, krijgen we de volgende tabel.

Laten we proberen de eerste variant te gebruiken, d.w.z. Vóór invoegen

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

Hier wordt de trigger aangeroepen als we automatisch gegevens in de studententabel invoegen. De trigger voegt 100 toe aan de cijferkolom in de leerlingkolom.

Laten we nu de tweede variant gebruiken, d.w.z. Na Invoegen

Om deze variant te gebruiken hebben we nog een tabel nodig, d.w.z. Percentage waar de trigger de resultaten opslaat. Gebruik de onderstaande code om de percentagetabel te maken.

create table Final_mark(
per int );

Laten we nu de trigger voor het invoegen gebruiken

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

Hier, wanneer we gegevens in de tabel invoegen, total_mark trigger slaat het resultaat op in de tabel Final_mark.

Dat was alles over de operatie op triggers, laten we nu verder gaan en de voor- en nadelen bekijken.

Voor- en nadelen van triggers

Voordelen

  • beveiliging afdwingen goedkeuringen op de tafel die aanwezig zijn in de database
  • Triggers bieden een andere manier om de integriteit van gegevens te controleren
  • Ongeldig tegengaan uitwisselingen
  • Triggers verhelpen fouten uit de databaselaag
  • Normaal gesproken kunnen triggers handig zijn voor het inspecteren van de gegevens veranderingen in tabellen
  • Triggers bieden een alternatieve manier om sgeplande taken uit te voeren . Door triggers te gebruiken, hoeven we niet te wachten tot de geplande gebeurtenissen worden uitgevoerd, omdat de triggers automatisch worden aangeroepen voordat of nadat een wijziging is aangebracht in de gegevens in een tabel

Nadeel s

  • Triggers kunnen alleen uitgebreide validaties geven , d.w.z. niet alle soorten validaties. Voor eenvoudige validaties kunt u de beperkingen NOT NULL, UNIQUE, CHECK en FOREIGN KEY gebruiken
  • Triggers kunnen de overhead verhogen van de database
  • Het kan moeilijk zijn om problemen met triggers op te lossen omdat ze automatisch worden uitgevoerd in de database, wat niet onzichtbaar mag zijn voor de clienttoepassingen

Dit brengt ons bij het einde van dit Triggers in SQL-artikel. Ik hoop dat je de concepten van Triggers hebt begrepen.

Als je meer wilt weten over MySQL en deze open-source relationele database wilt leren kennen, bekijk dan onze MySQL DBA-certificeringstraining die wordt geleverd met door een instructeur geleide live training en echte - levensprojectervaring. Deze training zal u helpen MySQL diepgaand te begrijpen en u te helpen het onderwerp onder de knie te krijgen.

Heeft u een vraag voor ons? Vermeld het in het opmerkingengedeelte van deze Triggers in SQL en we nemen contact met je op.


  1. Correcte manier om Bi-directioneel 1:m in Green-DAO . te hanteren

  2. Waarom beginnen tabelnamen in SQL Server met dbo?

  3. PostgreSQL voor Windows ontwikkelen, deel 2

  4. PostgreSQL10 upgraden naar PostgreSQL11 zonder downtime