Išplėstinė „Mysql“ - trigerio programavimas

Turinys
Išplėstinė „Mysql“ - trigerio programavimas
Aktyvikliai yra duomenų bazės objektas, kuris atlieka veiksmą, kai duomenų bazėje įvyko operacija ar įvykis.
Pavyzdys, kai parduodamas įėjimo bilietas, suteikiame nuolaidą laisvai vietai.
Bendrasis kodas yra
Sukurti trigerį trigerio pavadinimas
{PRIEŠ | DESPUES DE}
// Jis bus vykdomas prieš arba po įvykio
{INSERT | ATNAUJINTI | IŠTRINTI}
// veiksmą ar įvykį, kuris suaktyvina trigerį
ON lentelės pavadinimas
// įvykį paveikusios lentelės pavadinimas
KIEKVIENAI EILEI
sql pareiškimas turi būti įvykdytas
Kuriame bilietų į renginį ar sandėlyje esančio produkto pardavimo pavyzdį. Norėdami tai patikrinti, galite naudoti „phpmyadminn“ arba bet kokią programinę įrangą, kuri palaiko išsaugotas procedūras ir aktyviklius.
Mes kuriame duomenų bazę
KURTI DUOMENŲ BAZĘ „pardavimai“
Mes sudarome 2 lenteles
Stalas parduodamiems bilietams laikyti
KURTI STALO „bilietus“ (
`id` int (10) NOT NULL AUTO_INCREMENT,
„idevent“ int (11) NE NULL,
`nroticket` int (11) NE NULL,
PAGRINDINIS RAKTAS („id“)
) VARIKLIS = MyISAM DEFAULT CHARSET = latin1 AUTO_INCREMENT = 1;
Lentelė, skirta saugoti bilietų į tam tikrą renginį prieinamumą
KURTI LENTELĘ, JEI NĖRA „atsargų“ (
`idevent` int (10) NOT NULL,
`stockactual` int (10) NE NULL
) VARIKLIS = MyISAM DEFAULT CHARSET = latin1;
KURTI LENTELĘ „įvykiai“ (
`idevent` int (10) NOT NULL AUTO_INCREMENT,
`event` int (11) varchar (200),
"data" data NE NULL,
PAGRINDINIS RAKTAS („idevent“)
) VARIKLIS = MyISAM DEFAULT CHARSET = latin1 AUTO_INCREMENT = 1;
Sukuriame trigerį kaip sql užklausą, šiuo atveju naudojame nemokamą HEIDISQL programinę įrangą, NAUJĄ teiginį.
a nurodo, kurį aktyvinimo operacijos lauką mes naudosime vykdydami šiuo atveju, jei jų yra daugiau, aš visada juos naudoju su NEW priešais,
CREATE TRIGGER `update_stock` PO INSERT ON` bilietai`
KIEKVIENAM
EILUTĖ
ATNAUJINTI atsargų rinkinį stockactual = stockactual -1 WHERE idevent = NEW.idevent

Vykdome SQL sakinį ir matome, kad trigeris tikrai sukurtas:

Pavyzdžiui, į lentelę įeiname 500 bilietų, kuriuos galima įsigyti įvykiui, čia nebus jokio atsako iš trigerio, nes mes sukuriame jį vykdyti, jei įterpiama į stalo bilietus.
INSERT INTO "sales" stocks ("eventide", "current stock") VERTĖS ("1", "500");

Dabar išbandykime trigerių magiją
Tarkime, mes parduodame bilietą Nr. 100 1 renginiui ir įterpiame išpardavimą į bilietų duomenų bazę
INSERT INTO bilietai (idevent, nroticket) VALUES ('1', '100');
Stebėkime, kas atsitiko atsargų lentelėje, ir pamatysime, kad šio įvykio atsargos dabar turi 499 bilietus, nes lentelės intarpas bilietas Aš šaunu ir paleisiu tigrą update_stock.
Naudojant šią metodiką tiek vartotojui, tiek programuotojui užtikrinamas vykdymo skaidrumas, žinant, kad veiksmas bus atliktas, jei jį suaktyvins kitas, ir taip išvengsite įprastų užduočių, tokių kaip atsargų atnaujinimas pardavimo atveju, įsivaizduokite tai, jei pardavimas yra rinkoje su tūkstančiais produktų, matome, kaip su keliomis kodo eilutėmis išsprendžiame didelę problemą.
Kitas pavyzdys galėtų būti produkto pašalinimas iš sandėlio ir atsargų pašalinimas
KURTI TRIGGERĮ „Lower_products“ PO DELETE ON` produktų`
KIEKVIENAM

Ištrinti iš atsargų, kur productid = NEW.productid
EILUTĖ
Galimybės yra neribotos ir jūs galite gilintis į sudėtingesnes situacijas, trigeriai puikiai papildo saugomas procedūrasAr jums patiko ir padėjo ši pamoka?Galite apdovanoti autorių paspausdami šį mygtuką, kad suteiktumėte jam teigiamą tašką
wave wave wave wave wave