Trigger (adatbázisok)

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2017. március 6-án áttekintett verziótól ; az ellenőrzések 8 szerkesztést igényelnek .

A trigger ( eng.  trigger ) egy speciális típusú tárolt eljárás , amelyet a felhasználó nem hív meg közvetlenül, és amelynek végrehajtása az adatmódosítási műveletnek köszönhető: adott tábla sorának hozzáadása INSERT, törlése vagy adatmódosítás egy adott táblában. adott relációs adatbázistábla adott oszlopa . DELETEUPDATE

A triggerek az adatok integritásának biztosítására és összetett üzleti logika megvalósítására szolgálnak . A kiszolgáló automatikusan elindít egy triggert, amikor megpróbálja módosítani a hozzá társított tábla adatait. Minden adatmódosítást végrehajtottnak kell tekinteni abban a tranzakcióban , amelyben az eseményindítót kiváltó művelet végrehajtásra került. Ennek megfelelően, ha hibát észlel vagy megsérti az adatok integritását, a tranzakció visszaállítható.

Az eseményindító aktiválása kulcsszavakkal definiálható BEFORE(az aktiválási szabály a hozzá tartozó esemény végrehajtása előtt, például rekord hozzáadása előtt) vagy AFTER(az esemény után) aktiválódik. Ha a triggert az esemény előtt hívják meg, akkor módosíthatja az esemény által módosított rekordot (természetesen feltéve, hogy az esemény nem rekordtörlés). Egyes DBMS-ek korlátozásokat írnak elő a triggerben használható utasításokra (például tilos módosítani azt a táblát, amelyen a trigger "lóg" stb.).

Ezenkívül a triggereket nem táblázathoz, hanem nézethez (NÉZET) lehet csatolni. Ebben az esetben az ő segítségükkel valósul meg a „frissített nézet” mechanizmus. Ebben az esetben a BEFOREés kulcsszavak AFTERcsak a triggerhívások sorrendjét érintik, mivel a tényleges esemény (törlés, beillesztés vagy frissítés) nem történik meg.

Egyes kiszolgálókon előfordulhat, hogy a triggereket nem minden módosított rekordhoz hívják meg, de táblamódosításonként egyszer. Az ilyen triggereket táblázat triggereknek nevezzük.

Példa ( Oracle Database ):

/* Táblázatszintű trigger */ TRIGGER LÉTREHOZÁSA VAGY CSERÉJE DistrictUpdatedTrigger AFTER UPDATE ON District BEGIN beszúrása az információs értékekbe ( 'a "körzet" táblázat megváltozott' ); VÉGE ;

Ebben az esetben, hogy megkülönböztessük a táblázat aktiválási szabályait a sor triggerektől, további kulcsszavakat vezetünk be a sor triggerek leírásakor. Az Oracle-ben ez egy kifejezés FOR EACH ROW.

Példa:

/* Sorszintű trigger */ TRIGGER LÉTREHOZÁSA VAGY CSERÉJE KörzetUpdatedTrigger FRISSÍTÉS UTÁN A kerület MINDEN SORKEZDÉSÉNEK beszúrása az információs értékekbe ( ' egy sor megváltozott a "körzet" táblázatban' ) ; VÉGE ;