Skip navigation

BEFORE és AFTER triggerek

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.