Triggeri (tietokannat)

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 6. maaliskuuta 2017 tarkistetusta versiosta . tarkastukset vaativat 8 muokkausta .

Trigger ( eng.  trigger ) on tallennettu toimintosarja , joka on erikoistyyppinen, jota käyttäjä ei kutsu suoraan ja jonka suorittaminen johtuu tietojen muokkaustoiminnosta: taulukon rivin lisäämisestä INSERT, poistamisesta tai tietojen muuttamisesta tietyn relaatiotietokantataulukon sarake . DELETEUPDATE

Triggereillä varmistetaan tietojen eheys ja toteutetaan monimutkainen liiketoimintalogiikka . Palvelin käynnistää automaattisesti triggerin, kun se yrittää muuttaa sen taulukon tietoja, johon se liittyy. Kaikki sen tekemät datamuutokset katsotaan suoritetuiksi siinä tapahtumassa , jossa liipaisimen laukaisua aiheuttanut toiminto suoritettiin. Vastaavasti, jos havaitaan virhe tai tietojen eheys rikotaan, tämä tapahtuma voidaan peruuttaa.

Kun triggeri käynnistetään, määritetään avainsanoilla BEFORE(triggeri käynnistetään ennen siihen liittyvän tapahtuman suorittamista; esimerkiksi ennen tietueen lisäämistä) tai AFTER(tapahtuman jälkeen). Jos triggeriä kutsutaan ennen tapahtumaa, se voi tehdä muutoksia tapahtuman muokkaamaan tietueeseen (tietysti, jos tapahtuma ei ole tietueen poisto). Jotkut DBMS-järjestelmät asettavat rajoituksia käskyille , joita voidaan käyttää triggerissä (esimerkiksi saatetaan kieltää muutosten tekeminen taulukkoon, jossa triggeri "jumiutuu" jne.).

Lisäksi triggerit voidaan kiinnittää ei taulukkoon, vaan näkymään (NÄKYMÄ). Tässä tapauksessa heidän avullaan "päivitetty näkymä" -mekanismi toteutetaan. Tässä tapauksessa avainsanat BEFOREja AFTERvaikuttavat vain liipaisukutsujen sarjaan, koska varsinaista tapahtumaa (poisto, lisäys tai päivitys) ei tapahdu.

Joillakin palvelimilla triggereitä ei ehkä kutsuta jokaiselle muokatulle tietueelle, mutta kerran taulukon muutosta kohden. Tällaisia ​​laukaisimia kutsutaan taulukon triggereiksi.

Esimerkki ( Oracle Database ):

/* Taulukkotason liipaisin */ LUO TAI KORVAA TRIGGER DistrictUpdatedTrigger PÄIVITYKSEN JÄLKEEN piirin BEGIN Lisää tietoarvoihin ( ' taulukko "piiri" on muuttunut' ) ; LOPPU ;

Tässä tapauksessa rivilaukaisimia kuvattaessa otetaan käyttöön lisäavainsanoja rivilaukaisimien erottamiseksi toisistaan. Oraclessa tämä on lause FOR EACH ROW.

Esimerkki:

/* Rivitason liipaisin */ LUO TAI KORVAA TRIGGER DistrictUpdatedTrigger PÄIVITYKSEN JÄLKEEN piirissä JOKAINEN RIVI ALOITUS lisää tietoarvoihin ( ' yksi rivi taulukossa "piiri" on muuttunut' ) ; LOPPU ;