Yhteenveto: Tässä opetusohjelmassa opit käyttämään PostgreSQL:n CREATE TRIGGER
-lauseketta liipaisimen luomiseen.
Luot uuden liipaisimen PostgreSQL:ssä noudattamalla seuraavia vaiheita:
- Luo ensin liipaisinfunktio käyttäen
CREATE FUNCTION
-lauseketta. - Toiseksi sido laukaisufunktio taulukkoon käyttämällä
CREATE TRIGGER
-lauseketta.
Jos et ole perehtynyt käyttäjän määrittelemien funktioiden luomiseen, voit tutustua PL/pgSQL-osioon.
Luo laukaisufunktioiden syntaksi
Laukaisufunktio on samanlainen kuin tavallinen käyttäjän määrittelemä funktio. Laukaisufunktio ei kuitenkaan ota argumentteja ja sillä on paluuarvo, jonka tyyppi on trigger
.
Seuraavassa havainnollistetaan laukaisufunktion luomisen syntaksia:
Code language: SQL (Structured Query Language) (sql)
Huomaa, että voit luoda laukaisufunktion millä tahansa PostgreSQL:n tukemalla kielellä. Tässä opetusohjelmassa käytämme PL/pgSQL:ää.
Liipaisufunktio saa tietoja kutsuvasta ympäristöstään erityisen rakenteen nimeltä TriggerData kautta, joka sisältää joukon paikallisia muuttujia.
Esimerkiksi OLD
ja NEW
edustavat taulukon rivin tiloja ennen tai jälkeen laukaisevan tapahtuman.
PostgreSQL tarjoaa myös muita paikallisia muuttujia, joita edeltää TG_
, kuten TG_WHEN
ja TG_TABLE_NAME
.
Kun olet määrittänyt laukaisufunktion, voit sitoa sen yhteen tai useampaan laukaisutapahtumaan, kuten INSERT
, UPDATE
ja DELETE
.
PostgreSQL:n CREATE TRIGGER -lauseen käyttöönotto DELETE
Tutustuminen PostgreSQL:n CREATE TRIGGER-lauseeseen
Lauseke CREATE TRIGGER
luokkaa uudenlaisen liipaisun. Seuraavassa havainnollistetaan CREATE TRIGGER
-lauseen perussyntaksi:
Code language: SQL (Structured Query Language) (sql)
Tässä syntaksissa:
Ensin määritetään liipaisimen nimi TRIGGER
-avainsanojen jälkeen.
Toiseksi määritetään ajoitus, joka aiheuttaa liipaisimen laukeamisen. Se voi olla BEFORE
tai AFTER
tapahtuma tapahtuu.
Kolmanneksi, määritä tapahtuma, joka kutsuu laukaisimen. Tapahtuma voi olla INSERT
, DELETE
, UPDATE
tai TRUNCATE
.
Neljäs, määritä laukaisimeen liittyvän taulukon nimi avainsanan ON
jälkeen.
Viidenneksi määritä laukaisimien tyyppi, joka voi olla:
- Rivitason laukaisija, joka määritetään
FOR EACH ROW
-lausekkeella. - Statement-tason laukaisija, joka määritetään
FOR EACH STATEMENT
-lausekkeella.
Rivitason liipaisin laukeaa jokaiselle riville, kun taas lauseketason liipaisin laukeaa jokaiselle tapahtumalle.
Esitellään, että taulussa on 100 riviä ja kaksi liipaisinta, jotka laukeavat, kun DELETE
-tapahtuma tapahtuu.
Jos lausekkeella DELETE
poistetaan 100 riviä, rivitason liipaisin laukeaa sataan kertaan, kerran jokaiselle poistetulle riville. Sitä vastoin lauseketason triggeri laukeaa kerran riippumatta siitä, kuinka monta riviä poistetaan.
Määritä lopuksi triggerifunktion nimi EXECUTE PROCEDURE
-avainsanojen jälkeen.
PostgreSQL CREATE TRIGGER esimerkki
Seuraavalla lausekkeella luodaan uusi taulukko nimeltä employees
:
Code language: SQL (Structured Query Language) (sql)
Esitellään, että kun työntekijän nimi muuttuu, halutaan kirjata muutokset erilliseen taulukkoon nimeltä employee_audits
:
Code language: SQL (Structured Query Language) (sql)
Luo ensin uusi funktio nimeltä log_last_name_changes
:
Code language: SQL (Structured Query Language) (sql)
Funktio lisää vanhan sukunimen employee_audits
-taulukkoon sisältäen työntekijän tunnuksen, sukunimen ja muutosajankohdan, jos työntekijän sukunimi muuttuu.
OLD
edustaa ennen päivitystä olevaa riviä, kun taas NEW
edustaa uutta päivitettävää riviä. OLD.last_name
palauttaa sukunimen ennen päivitystä ja NEW.last_name
palauttaa uuden sukunimen.
Sidotaan toiseksi laukaisufunktio employees
-tauluun. Laukaisijan nimi on last_name_changes
. Ennen kuin last_name
-sarakkeen arvo päivitetään, laukaisufunktio kutsutaan automaattisesti kirjaamaan muutokset.
Code language: SQL (Structured Query Language) (sql)
Kolmanneksi lisätään joitakin rivejä employees
-taulukkoon:
Code language: SQL (Structured Query Language) (sql)
Neljänneksi tutkitaan employees
-taulukon sisältöä:
Code language: SQL (Structured Query Language) (sql)
Esitellään, että Lily Bush
vaihtaa sukunimensä muotoon Lily Brown
.
Viidenneksi päivitä Lilyn sukunimi uuteen:
Code language: SQL (Structured Query Language) (sql)
Seitsemänneksi tarkista, onko Lily
:n sukunimi päivitetty:
Code language: SQL (Structured Query Language) (sql)
Kuten tulosteesta näkyy, Lilyn sukunimi on päivitetty.
Kahdeksanneksi tarkista employee_audits
-taulun sisältö:
Code language: SQL (Structured Query Language) (sql)
Triggeri kirjautti muutoksen employee_audits
-tauluun.
Tässä opetusohjelmassa olet oppinut käyttämään PostgreSQL CREATE TRIGGER
:tä uuden liipaisimen luomiseen.
- Oliko tästä opetusohjelmasta apua?
- KylläEi
.