Cuprins
Advanced Mysql - Programare TriggerUn Triggers este un obiect din baza de date care execută o acțiune atunci când a avut loc o operație sau un eveniment în baza de date.
Exemplu când se vinde un bilet de intrare, reducem un loc disponibil.
Codul generic este
CREAȚI TRIGGER numele declanșatorului
{ÎNAINTE | DISPUES DE}
// Va fi executat înainte sau după eveniment
{INSERT | ACTUALIZARE | ȘTERGE}
// acțiune sau eveniment care declanșează declanșatorul
ON numele mesei
// numele tabelului care a afectat evenimentul
PENTRU FIECARE RÂND
declarația sql de executat
Creăm exemplul vânzării de bilete pentru un eveniment sau produs în stoc. Pentru a testa acest lucru, puteți utiliza phpmyadminn sau orice software care acceptă proceduri și declanșatoare stocate.
Creăm baza de date
CREAȚI BAZA DE DATE „vânzări”
Creăm 2 tabele
Masa pentru depozitarea biletelor vândute
CREAȚI TABLE `bilete` (
`id` int (10) NOT NULL AUTO_INCREMENT,
`idevent` int (11) NOT NULL,
`nroticket` int (11) NOT NULL,
CHEIE PRIMARĂ („id”)
) MOTOR = MyISAM DEFAULT CHARSET = latin1 AUTO_INCREMENT = 1;
Tabelul pentru stocarea disponibilității biletelor pentru un anumit eveniment
CREAȚI TABELUL DACĂ NU EXISTĂ `stoc` (
`idevent` int (10) NOT NULL,
`stockactual` int (10) NU NUL
) MOTOR = MyISAM DEFAULT CHARSET = latin1;
CREAȚI TABLE `evenimente` (
`idevent` int (10) NOT NULL AUTO_INCREMENT,
`event` int (11) varchar (200),
data „date` NOT NULL,
CHEIE PRIMARĂ („idevent”)
) MOTOR = MyISAM DEFAULT CHARSET = latin1 AUTO_INCREMENT = 1;
Creăm declanșatorul ca o interogare sql, în acest caz folosim software-ul gratuit HEIDISQL, declarația NEW.
a indică ce câmp al operației de declanșare vom folosi în execuție în acest caz de eveniment, dacă există mai multe, le folosesc întotdeauna cu NOU în față,
CREAȚI TRIGGER `update_stock` DUPĂ INSERARE ON` bilete`
PENTRU FIECARE
RÂND
UPDATE stoc SET stoc actual = stoc actual -1 UNDE idevent = NOU.idevent
Executăm instrucțiunea SQL și vedem că declanșatorul a fost într-adevăr creat:
De exemplu, inserăm în tabel stocul a 500 de bilete disponibile pentru un eveniment, aici nu va exista niciun răspuns de la declanșator, deoarece îl creăm pentru a fi executat dacă apare o inserare în biletele de masă.
INSERAȚI ÎN „stocul de vânzări” („eventide”, „stoc curent”) VALORI („1”, „500”);
Acum să încercăm magia declanșatoarelor
Să presupunem că vindem numărul de bilet 100 pentru evenimentul 1 și introducem vânzarea în baza de date a biletelor
INSERT INTO tickets (idevent, nroticket) VALORI ('1', '100');
Să observăm ce s-a întâmplat în tabelul de stocuri și vom vedea că stocul pentru acest eveniment are acum 499 de bilete disponibile, deoarece inserția din tabel bilet Trag și conduc tigrul update_stock.
Utilizarea acestei metodologii permite transparența execuției atât utilizatorului, cât și programatorului, știind că o acțiune va fi executată dacă o declanșează alta și astfel se vor evita sarcini de rutină, cum ar fi actualizarea unui stoc în caz de vânzări, imaginați-vă acest lucru dacă vânzarea este o piață cu mii de produse, vedem cum cu câteva linii de cod rezolvăm o mare problemă.
Un alt exemplu ar putea fi eliminarea unui produs din depozit și eliminarea stocului
CREAȚI TRIGGER `Produse_superioare` DUPĂ ȘTERGEREA„ produselor`
PENTRU FIECARE
ȘTERGEȚI din stoc UNDE productid = NEW.productid
RÂND
Posibilitățile sunt nelimitate și puteți intra adânc în situații mai complexe, declanșatoarele sunt o completare excelentă a procedurilor stocateV-a plăcut și ați ajutat acest tutorial?Puteți recompensa autorul apăsând acest buton pentru a-i oferi un punct pozitiv