Mysql utløser eller utløser - Definere hendelser og øyeblikk

Innholdsfortegnelse
Påstanden som skaper en trigger er
OPPRETT TRIGGER trigger_name hendelsestid PÅ tabellen I HVER RAD

Øyeblikk
Det kan være ETTER eller FØR, det vil si etter eller før en sql -hendelse oppstår, for eksempel å lage en post, slette, velge, søke, endre osv.
Begivenhet
Vi kaller noen av sql -operasjonene en hendelse, det kan være INSERT, UPDATE eller DELETE. Valg kan ikke foretas fra utløsere (Velg * fra …) denne operasjonen utføres fra lagrede prosedyrer og ikke fra utløsere.
Generelle utsagn og kommandoer for å håndtere utløsere eller utløsere
Vi oppretter en utløser for en revisjon i salget av et bilbyrå, hver gang en operatør eller selger endrer dataene til en klient, vil vi automatisk i en tabell med audits_cliente angi dato og klokkeslett, hvem som gjorde endringen og som er klienten som ble endret
 OPPRETT TRIGGER client_audit_trigger ETTER OPPDATERING PÅ klienter FOR HVER RADESETT INN i client_audit (clientid, modified_by, date) VERDIER (OLD.clientid, NEW.idoperator, NÅ ()) 

Spør alle utløsere som er tilgjengelige i databasen
Vis utløsere

I dette tilfellet, den vi lager klientrevisjon og ser funksjonaliteten i forskjellige kolonner, en oppdateringshendelse i klienttabellen som vil gjøre en innsetting og administratorbrukeren er roten
Slett en utløser fra databasen
DROP TRIGGER utløsernavn

Hvordan ringe lagrede prosedyrer i en trigger
Vi vil analysere et eksempel for en produktdatabase, og at når en salgsgenerator selger må også generere provisjonen han tjener, må provisjonen per salg oppdateres etter at det nye salget er satt inn eller generert, eller det kan også være etter å ha generert en faktura , avhengig av forretningsmodellen som skal utvikles, men det er nok til at eksemplet blir forstått.
Vi lager en lagret prosedyre som beregner provisjonen basert på mengden av et produkt som selges.
 DELIMITER $$ OPPRETTE PROSEDYRE pa_commission` (I p_vendor ID INT, IN p_product ID INT, I mengde INT) BEGIN DECLARE totalcommission INT DEFAULT 0; Velg provisjon fra produkter der productid = p_productid; totalcommission = provisjon * p_amount sett inn i provisjoner (selger, provisjon) verdier (sellerid, productid, provisjon, totalcommission); SLUTT $$ DELIMITER $$ 

Nå lager vi den nye salgsutløseren. Denne utløseren vil bli utført etter at du har satt inn et salg og tatt dataene fra denne eller salgsdetaljene.
 OPPRETT TRIGGER nytt salg ETTER INSERT på salg FOR HVER RAD BEGYNNE SAMTAL pa_commissions (new.id selger, new.idproduct, new.quantity); SLUTT $$ 

Vi kan se at den lagrede prosedyren kalles for å kunne konsultere produktdata, provisjon og dermed automatisk kunne beregne provisjonsbeløpet.
Vi kan også gjøre det mer komplekst slik at vi kan vite om provisjonen og salget allerede eksisterer, deretter endre det og ikke sette det inn igjen.
For dette bør vi også gjenkjenne salgs- eller fakturanummeret, så ser vi etter om produktet allerede finnes i salgs- og selgernummeret, det innebærer at det allerede eksisterer og ble tatt i bruk, derfor vil vi endre og ikke sette inn som et nytt salg.
 velg count (productid)> 0 inn eksisterer allerede fra provisjoner der sellerid = sellerid og salesid = salesid; hvis den allerede eksisterer, OPPDATER kommisjoner provisjon = totalkommisjon der sellerid = sellerid og salesid = salesid; ellers sett inn verdier i provisjon (selger, provisjon) (selgerid, produktid, provisjon, totalkommisjon); slutt om; 
Likte og hjalp du denne opplæringen?Du kan belønne forfatteren ved å trykke på denne knappen for å gi ham et positivt poeng
wave wave wave wave wave