BEFORE vagy AFTER triggert kell használni?
Gyakorta előfordul, amikor egy új triggert írunk, hogy mikor kell annak a triggernek lefutnia: az aktualizálási művelet előtt vagy utána? Ez attól függ, hogy mi a célunk a triggerrel, és azt kell átgondolnunk, hogy fontos-e, hogy az aktualizálási művelet lefusson, mielőtt a triggerben foglalt utasítássorozatot lefuttatjuk vagy ellenkezőleg, a triggernek kell megelőznie az utasítást.
- Ha azt szeretnénk, hogy a trigger az aktualizálási művelet előtt fusson le, akkor a BEFORE kulcsszót kell használni.
- Ha azt szeretnénk, hogy a trigger az aktualizálási művelet után fusson le, akkor az AFTER kucsszót kell használni.
- Az INSTEAD OF kulcsszó csakis akkor használható, ha nézettáblát "figyelünk" a triggerrel.
Nézzük az alábbi eseteket - egyelőre még konkrét adatbázis nélkül:
- Tegyük fel, hogy egy táblába beszúrunk egy új rekordot, és szeretnénk egy NAPLO táblába bejegyezni, hogy melyik felhasználó, mikor szúrta be azt a rekordot. Ekkor AFTER triggert kell használni. Miért? Egyrészről biztosak szeretnénk lenni abban, hogy az új rekordot tényleg be tudtuk szúrni a táblába (nem volt például kulcsérték ütközés).
- Tegyük fel, hogy egy új rekordot rögzítünk az adatbázisba egy vásárláskor és a termék mellett megadjuk a darabszámot is. Ekkor ki kell számolnunk, hogy mennyi a vásárlási tétel összértéke: darabszám * egységár. Ekkor BEFORE triggert kell használnunk, mert az előtt kell kiszámolnunk a tétel összértékét, mielőtt a vásárlási rekordot beszúrjuk az adatbázisba.
- Tegyük fel, hogy egy online áruházat működtetünk és mielőtt a vevő leadja a rendelését egy triggerrel szeretnénk ellenőrizni, hogy van még annyi termék a készleten, amennyit a vevő rendelt. Ezt az ellenőrzést BEFORE triggerrel kell végrehajtanunk, mert az előtt kell ellenőriznünk a készletet, mielőtt a vevő rendelését rögzítjük az adatbázisban. Ha nincs megfelelő mennyiség raktáron, akkor értesíteni kell róla a vevőt.
- Tegyük fel, hogy egy kvíz játékban a játékos kérdéseket válaszol meg egyenként és a pontszámát minden kérdés után frissítjük. Ebben az esetben a pontszám frissítésre AFTER triggert kell használnuk, mivel az összpontszámot az után kell módosítani, miután beszúrtuk az új válaszát az adatbázisba.