Innehållsförteckning
Advanced Mysql - Trigger ProgrammingEn utlösare är ett objekt i databasen som utför en åtgärd när en operation eller händelse har inträffat i databasen.
Exempel när en entrébiljett säljs rabatterar vi en ledig plats.
Den generiska koden är
SKAPA TRIGGER utlösarnamn
{INNAN | DESPUES DE}
// Det kommer att köras före eller efter händelsen
{INSERT | UPPDATERA | RADERA}
// handling eller händelse som utlöser utlösaren
PÅ tabellnamn
// namn på tabellen som påverkade händelsen
FÖR VARJE RAD
sql -sats som ska köras
Vi skapar exemplet på biljettförsäljning för ett evenemang eller en produkt i lager. För att testa detta kan du använda phpmyadminn eller någon programvara som stöder lagrade procedurer och utlösare.
Vi skapar databasen
SKAPA DATABAS 'försäljning'
Vi skapar 2 bord
Bordet för att förvara de sålda biljetterna
SKAPA TABELL `biljetter` (
`id` int (10) INTE NULL AUTO_INCREMENT,
`idevent` int (11) NOT NULL,
`nroticket` int (11) NOT NULL,
PRIMÄR KEY ('id')
) MOTOR = MyISAM DEFAULT CHARSET = latin1 AUTO_INCREMENT = 1;
Tabellen för att lagra tillgängligheten av biljetter för ett visst evenemang
SKAPA TABELL OM DET INTE FÖRESKRIVS 'lager' (
`idevent` int (10) NOT NULL,
`stockactual` int (10) NOT NULL
) MOTOR = MyISAM DEFAULT CHARSET = latin1;
SKAPA TABELL `händelser` (
`idevent` int (10) INTE NULL AUTO_INCREMENT,
`event` int (11) varchar (200),
`date` date NOT NULL,
PRIMÄR KEY ('idevent')
) MOTOR = MyISAM DEFAULT CHARSET = latin1 AUTO_INCREMENT = 1;
Vi skapar utlösaren som en sql -fråga, i det här fallet använder vi den kostnadsfria HEIDISQL -programvaran, det NYA uttalandet. Kolumnnamn
a indikerar vilket fält av triggeroperationen vi ska använda vid körningen i detta fall, om det finns fler använder jag dem alltid med NEW framför,
SKAPA TRIGGER `update_stock` EFTER INSERT ON` biljetter`
FÖR VARJE
RAD
UPDATE stock SET stockactual = stockactual -1 WHERE idevent = NEW.idevent
Vi kör SQL -satsen och ser att utlösaren verkligen har skapats:
Som ett exempel sätter vi in tabellen med 500 biljetter tillgängliga för ett evenemang, här kommer det inte att finnas något svar från utlösaren eftersom vi skapar den för att köras om en insättning sker i tabellbiljetterna.
SÄTT IN I "försäljnings" lager "(" eventide "," nuvarande lager ") VÄRDER ('1', '500');
Låt oss nu prova magin av triggers
Anta att vi säljer biljettnummer 100 för evenemang 1 och sätter in försäljningen i biljettdatabasen
INSERT INTO tickets (idevent, nroticket) VÄRDEN ('1', '100');
Låt oss observera vad som hände i lagertabellen och vi kommer att se att lagret för detta evenemang nu har 499 biljetter tillgängliga, eftersom insatsen i tabellen biljett Jag skjuter och kör tigern update_stock.
Användningen av denna metod möjliggör transparens i utförandet för både användaren och programmeraren, med vetskap om att en åtgärd kommer att utföras om en annan utlöser det och därmed undvika rutinmässiga uppgif.webpter som att uppdatera ett lager vid försäljning, föreställ dig detta om försäljningen är en marknaden med tusentals produkter ser vi hur vi med några rader kod löser ett stort problem.
Ett annat exempel kan vara att ta bort en produkt från lagret och ta bort lagret
SKAPA TRIGGER `Lägre_produkter` EFTER RADERA PÅ` produkter`
FÖR VARJE
DELETE OF stock WHERE productid = NEW.productid
RAD
Möjligheterna är oändliga och du kan gå djupt in i mer komplexa situationer, triggers är ett bra komplement till lagrade procedurerGillade 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