Innholdsfortegnelse
Avansert Mysql - UtløserprogrammeringEn utløser er et objekt i databasen som utfører en handling når en operasjon eller hendelse har skjedd i databasen.
Eksempel når en inngangsbillett er solgt, rabatterer vi et ledig sete.
Den generiske koden er
LAG TRIGGER utløsernavn
{FØR | DESPUES DE}
// Den vil bli utført før eller etter hendelsen
{INSERT | OPPDATERING | SLETT}
// handling eller hendelse som utløser utløseren
PÅ bordnavn
// navnet på tabellen som påvirket hendelsen
FOR HVER RAD
sql -setning som skal utføres
Vi skaper et eksempel på billettsalg for et arrangement eller produkt på lager. For å teste dette kan du bruke phpmyadminn eller hvilken som helst programvare som støtter lagrede prosedyrer og utløsere.
Vi lager databasen
OPPRETT DATABASE `salg`
Vi lager 2 bord
Bordet for å lagre solgte billetter
LAG TABELL `billetter` (
`id` int (10) IKKE NULL AUTO_INCREMENT,
`idevent` int (11) IKKE NULL,
`nroticket` int (11) IKKE NULL,
PRIMÆR NØKKEL (`id ')
) MOTOR = MyISAM DEFAULT CHARSET = latin1 AUTO_INCREMENT = 1;
Tabellen for å lagre tilgjengeligheten av billetter til et bestemt arrangement
OPPRETT TABELL HVIS IKKE FINNES `lager` (
`idevent` int (10) IKKE NULL,
`stockactual` int (10) IKKE NULL
) MOTOR = MyISAM DEFAULT CHARSET = latin1;
OPPRETT TABELL `hendelser` (
`idevent` int (10) IKKE NULL AUTO_INCREMENT,
`event` int (11) varchar (200),
`date` date NOT NULL,
PRIMÆR NØKKEL (`idevent`)
) MOTOR = MyISAM DEFAULT CHARSET = latin1 AUTO_INCREMENT = 1;
Vi lager utløseren som en sql -spørring, i dette tilfellet bruker vi gratis HEIDISQL -programvaren, den NYE setningen. Kolonnenavn
a angir hvilket felt av triggeroperasjonen vi skal bruke i utførelsen i dette tilfellet, hvis det er flere jeg alltid bruker dem med NEW foran,
LAG TRIGGER `update_stock` ETTER INSERT ON` billetter`
FOR HVER
RAD
OPPDATER lager SET stockactual = stockactual -1 WHERE idevent = NEW.idevent
Vi kjører SQL -setningen og ser at utløseren faktisk er opprettet:
Som et eksempel setter vi inn tabellen med 500 billetter tilgjengelig for et arrangement, her vil det ikke være noe svar fra utløseren siden vi lager den for å bli utført hvis det skjer en innsetting i tabellbillettene.
SETT INN I `salgs`` lager` (` eventide`, `nåværende lager`) VERDIER ('1', '500');
La oss nå prøve magien med utløsere
Anta at vi selger billettnummer 100 for arrangement 1 og setter inn salget i billettdatabasen
INSERT INTO tickets (idevent, nroticket) VERDIER ('1', '100');
La oss observere hva som skjedde i lagerbordet, og vi vil se at aksjen for dette arrangementet nå har 499 billetter tilgjengelig, fordi innsatsen i tabellen billett Jeg skyter og løper tiggeren update_stock.
Bruken av denne metoden tillater åpenhet for utførelse for både brukeren og programmereren, vel vitende om at en handling vil bli utført hvis en annen utløser det og dermed unngå rutinemessige oppgaver som å oppdatere en lager ved salg, tenk deg dette hvis salget er en markedet med tusenvis av produkter, ser vi hvordan vi med et par kodelinjer løser et stort problem.
Et annet eksempel kan være å fjerne et produkt fra lageret og fjerne lageret
OPPRETT TRIGGER `Nedre_produkter` ETTER SLETT PÅ` produkter`
FOR HVER
SLETT FRA lager WHERE productid = NEW.productid
RAD
Mulighetene er uendelige, og du kan gå dypt inn i mer komplekse situasjoner, utløsere er et godt supplement til lagrede prosedyrerLikte og hjalp du denne opplæringen?Du kan belønne forfatteren ved å trykke på denne knappen for å gi ham et positivt poeng