Mysql triggers or trigger - Definiera händelser och ögonblick

Innehållsförteckning
Påståendet som skapar en utlösare är
SKAPA TRIGGER trigger_name händelsetid PÅ tabellen PÅ VARJE RAD

Ögonblick
Det kan vara EFTER eller FÖRE, det vill säga efter eller innan en sql -händelse inträffar, till exempel att skapa en post, radera, välja, söka, ändra etc.
Händelse
Vi kallar någon av sql -operationerna för en händelse, det kan vara INSERT, UPDATE eller DELETE. Val kan inte göras från triggers (Välj * från …) denna operation utförs från lagrade procedurer och inte från triggers.
Allmänna uttalanden och kommandon för att hantera triggers eller triggers
Vi skapar en utlösare för en granskning vid försäljning av en bilbyrå, varje gång en operatör eller säljare ändrar data från en kund, automatiskt i en tabell med audits_cliente kommer vi att ange datum och tid, vem som gjorde ändringen och vilken som är kunden som modifierades
 SKAPA TRIGGER client_audit_trigger EFTER UPPDATERING PÅ klienter FÖR VARJE RADSINSERT I Client_audit (clientid, modified_by, date) VALUES (OLD.clientid, NEW.idoperator, NU ()) 

Fråga alla utlösare som finns i databasen
Visa utlösare

I det här fallet, den som vi skapar klientrevision och ser dess funktionalitet i olika kolumner, en uppdateringshändelse i klienttabellen som gör en infogning och dess administratörsanvändare är rot
Ta bort en utlösare från databasen
DROP TRIGGER triggername

Hur man kallar lagrade procedurer i en trigger
Vi kommer att analysera ett exempel för en produktdatabas och att när en försäljning genereras måste en säljare också generera den provision han tjänar, då måste provisionen per försäljning uppdateras efter att den nya försäljningen har införts eller genererats, eller så kan det också vara efter att ha genererat en faktura , beroende på vilken affärsmodell som ska utvecklas, men det räcker för att exemplet ska förstås.
Vi skapar ett lagrat förfarande som beräknar provisionen baserat på mängden av en såld produkt.
 DELIMITER $$ SKAPA FÖRFARANDE pa_commission` (I p_vendor ID INT, IN p_product ID INT, i kvantitet INT) BÖRJA DECLARE totalkommission INT DEFAULT 0; Välj provision från produkter där productid = p_productid; totalcommission = provision * p_amount infoga i provision (säljare, provision) värden (säljarid, produktid, provision, totalcommission); END $$ DELIMITER $$ 

Nu skapar vi den nya försäljningsutlösaren. Denna utlösare kommer att utföras efter att en försäljning har införts och data från denna eller av försäljningsdetaljen har tagits.
 SKAPA TRIGGER ny försäljning EFTER INSERT på försäljning FÖR VARJE RAD BÖRJA RING pa_commissions (new.id säljare, new.idproduct, new.quantity); SLUT $$ 

Vi kan se att det lagrade förfarandet kallas för att kunna konsultera produktdata, provision och därmed automatiskt kunna beräkna provisionbeloppet.
Vi kan också göra det mer komplext så att vi kan veta om provisionen och försäljningen redan finns, sedan ändra den och inte infoga den igen.
För detta bör vi också känna igen försäljnings- eller fakturanumret, sedan letar vi efter om produkten redan finns i försäljnings- och säljarnumret, det innebär att den redan finns och togs i bruk, därför kommer vi att ändra och inte infoga som en ny försäljning.
 välj count (productid)> 0 in existerar redan från provisioner där sellerid = sellerid och salesid = salesid; om det redan existerar, UPPDATERA provisioner som provision = totalcommission där sellerid = sellerid och salesid = salesid; annars infoga värden i provision (säljare, provision) (säljarid, produktid, provision, totalkommission); sluta om; 
Gillade du och hjälpte denna handledning?Du kan belöna författaren genom att trycka på den här knappen för att ge honom en positiv poäng

Du kommer att bidra till utvecklingen av webbplatsen, dela sidan med dina vänner

wave wave wave wave wave