Mysql-triggers of trigger - Gebeurtenissen en momenten definiëren

Inhoudsopgave
De instructie die een trigger creëert is
MAAK TRIGGER trigger_name gebeurtenistijd OP tafel OP ELKE RIJ

Moment
Het kan NA of VOOR zijn, dat wil zeggen, na of voordat een sql-gebeurtenis plaatsvindt, zoals het maken van een record, verwijderen, selecteren, zoeken, wijzigen, enz.
Evenement
We noemen elk van de sql-bewerkingen een gebeurtenis, het kan INSERT, UPDATE of DELETE zijn. Er kunnen geen selecties worden gemaakt vanuit triggers (Selecteer * uit…) deze bewerking wordt uitgevoerd vanuit opgeslagen procedures en niet vanuit triggers.
Algemene instructies en opdrachten om triggers of triggers te beheren
We creëren een trigger voor een audit in de verkoop van een autobedrijf, elke keer dat een operator of verkoper de gegevens van een klant wijzigt, geven we automatisch in een tabel met audits_cliente de datum en tijd aan, wie de wijziging heeft aangebracht en wie de klant is dat is gewijzigd
 MAAK TRIGGER client_audit_trigger NA UPDATE OP clients VOOR ELKE RIJ INVOEGEN IN client_audit (clientid, gewijzigd_by, datum) WAARDEN (OLD.clientid, NEW.idoperator, NU ()) 

Alle beschikbare triggers in de database opvragen
Toon triggers

In dit geval, degene die we een client-audit maken en de functionaliteit ervan in verschillende kolommen zien, een update-gebeurtenis in de clients-tabel die een invoeging zal maken en de beheerdergebruiker is root
Een trigger uit de database verwijderen
DROP TRIGGER triggernaam

Opgeslagen procedures oproepen in een trigger
We zullen een voorbeeld analyseren voor een productdatabase en dat bij het genereren van een verkoop een verkoper ook de commissie moet genereren die hij verdient, dan moet de commissie per verkoop worden bijgewerkt na het invoegen of genereren van de nieuwe verkoop of het kan ook zijn na het genereren van een factuur , afhankelijk van het te ontwikkelen businessmodel, maar het volstaat om het voorbeeld te begrijpen.
We creëren een opgeslagen procedure die de commissie berekent op basis van de hoeveelheid van een verkocht product.
 DELIMITER $$ PROCEDURE MAKEN pa_commissie` (IN p_vendor ID INT, IN p_product ID INT, IN hoeveelheid INT) BEGIN VERKLAREN totale commissie INT STANDAARD 0; Selecteer commissie uit producten waarbij productid = p_productid; totale commissie = commissie * p_bedrag invoegen in commissies (verkoper, commissie) waarden (sellerid, productid, commissie, totale commissie); EINDE $$ DELIMITER $$ 

Nu maken we de nieuwe verkooptrigger. Deze trigger wordt uitgevoerd na het invoeren van een verkoop en het nemen van de gegevens van deze of van het verkoopdetail.
 MAAK TRIGGER nieuwe verkoop NA INSERT op verkoop VOOR ELKE RIJ BEGIN CALL pa_commissions (new.id verkoper, new.idproduct, new.quantity); EINDE $$ 

We zien dat de opgeslagen procedure wordt aangeroepen om de productgegevens, de commissie te kunnen raadplegen en zo automatisch het commissiebedrag te kunnen berekenen.
We kunnen het ook ingewikkelder maken, zodat we weten of de commissie en de verkoop al bestaan, deze vervolgens wijzigen en niet opnieuw invoegen.
Hiervoor moeten we ook het verkoop- of factuurnummer herkennen, dan kijken we of het product al bestaat in het verkoop- en verkopernummer, dit impliceert dat het al bestaat en in gebruik is genomen, daarom zullen we het wijzigen en niet invoegen als een nieuwe verkoop.
 selecteer aantal (product-id)> 0 in bestaat al uit commissies waar verkoper-id = verkoper-id en verkoop-id = verkoop-id; als het al bestaat, stel dan UPDATE commissies in commissie = totale commissie waarbij verkoper-id = verkoper-id en verkoop-id = verkoop-id; anders invoegen in commissies (verkoper, commissie) waarden (sellerid, productid, commissie, totale commissie); stop als; 
Vond je deze tutorial leuk en hielp je hem?Je kunt de auteur belonen door op deze knop te drukken om hem een ​​positief punt te geven

U zal helpen de ontwikkeling van de site, het delen van de pagina met je vrienden

wave wave wave wave wave