Summary: I denne vejledning lærer du, hvordan du bruger PostgreSQL CREATE TRIGGER
-erklæringen til at oprette en trigger.
For at oprette en ny trigger i PostgreSQL skal du følge disse trin:
- Først skal du oprette en triggerfunktion ved hjælp af
CREATE FUNCTION
-erklæringen. - For det andet skal du binde triggerfunktionen til en tabel ved hjælp af
CREATE TRIGGER
-anvisningen.
Hvis du ikke er bekendt med at oprette en brugerdefineret funktion, kan du tjekke afsnittet PL/pgSQL.
Skab triggerfunktionssyntaks
En triggerfunktion svarer til en almindelig brugerdefineret funktion. En triggerfunktion tager dog ikke imod nogen argumenter og har en returværdi med typen trigger
.
Det følgende illustrerer syntaksen for oprettelse af triggerfunktion:
Code language: SQL (Structured Query Language) (sql)
Bemærk, at du kan oprette en triggerfunktion ved hjælp af alle sprog, der understøttes af PostgreSQL. I denne vejledning vil vi bruge PL/pgSQL.
En triggerfunktion modtager data om sit kaldende miljø gennem en særlig struktur kaldet TriggerData, som indeholder et sæt lokale variabler.
For eksempel repræsenterer OLD
og NEW
tilstanden af rækken i tabellen før eller efter den udløsende hændelse.
PostgreSQL indeholder også andre lokale variabler, der indledes med TG_
, såsom TG_WHEN
og TG_TABLE_NAME
.
Når du har defineret en triggerfunktion, kan du binde den til en eller flere triggerbegivenheder såsom INSERT
, UPDATE
og DELETE
.
Indledning til PostgreSQL CREATE TRIGGER-anvisningen
Med CREATE TRIGGER
-anvisningen oprettes en ny trigger. Følgende illustrerer den grundlæggende syntaks for CREATE TRIGGER
-erklæringen:
Code language: SQL (Structured Query Language) (sql)
I denne syntaks:
Først skal du angive navnet på udløseren efter nøgleordene TRIGGER
.
Sekundt skal du angive den timing, der får udløseren til at udløses. Det kan være BEFORE
eller AFTER
en begivenhed opstår.
Tredje, angiv den begivenhed, der påkalder udløseren. Hændelsen kan være INSERT
, DELETE
, UPDATE
eller TRUNCATE
.
Fjerde, angiv navnet på den tabel, der er knyttet til udløseren, efter nøgleordet ON
.
Femte, angiv typen af udløsere, som kan være:
- Udløser på række-niveau, der er specificeret ved
FOR EACH ROW
-klausulen. - Udløser på statniveau, der er specificeret ved
FOR EACH STATEMENT
-klausulen.
En trigger på række-niveau udløses for hver række, mens en trigger på statement-niveau udløses for hver transaktion.
Sæt, at en tabel har 100 rækker og to triggere, der udløses, når en DELETE
-hændelse indtræffer.
Hvis DELETE
-erklæringen sletter 100 rækker, udløses triggeren på række-niveau 100 gange, én gang for hver slettet række. På den anden side vil en trigger på statement-niveau blive udløst én gang, uanset hvor mange rækker der slettes.
Til sidst skal du angive navnet på triggerfunktionen efter nøgleordene EXECUTE PROCEDURE
.
PostgreSQL CREATE TRIGGER eksempel
Den følgende anvisning opretter en ny tabel kaldet employees
:
Code language: SQL (Structured Query Language) (sql)
Sæt, at når navnet på en medarbejder ændres, ønsker du at logge ændringerne i en separat tabel kaldet employee_audits
:
Code language: SQL (Structured Query Language) (sql)
Først skal du oprette en ny funktion kaldet log_last_name_changes
:
Code language: SQL (Structured Query Language) (sql)
Funktionen indsætter det gamle efternavn i tabellen employee_audits
, herunder medarbejder-id, efternavn og tidspunktet for ændringen, hvis en medarbejders efternavn ændres.
Den OLD
repræsenterer rækken før opdatering, mens den NEW
repræsenterer den nye række, der vil blive opdateret. OLD.last_name
returnerer efternavnet før opdateringen, og NEW.last_name
returnerer det nye efternavn.
For det andet skal du binde triggerfunktionen til tabellen employees
. Triggernavnet er last_name_changes
. Før værdien af kolonnen last_name
opdateres, påkaldes triggerfunktionen automatisk for at logge ændringerne.
Code language: SQL (Structured Query Language) (sql)
For det tredje skal du indsætte nogle rækker i tabellen employees
:
Code language: SQL (Structured Query Language) (sql)
For det fjerde skal du undersøge indholdet i tabellen employees
:
Code language: SQL (Structured Query Language) (sql)
Sæt, at Lily Bush
ændrer sit efternavn til Lily Brown
.
Femte gang, opdater Lily’s efternavn til det nye:
Code language: SQL (Structured Query Language) (sql)
Syvende gang, kontroller om Lily
s efternavn er blevet opdateret:
Code language: SQL (Structured Query Language) (sql)
Som du kan se af output, er Lily’s efternavn blevet opdateret.
Attende skal du kontrollere indholdet af tabellen employee_audits
:
Code language: SQL (Structured Query Language) (sql)
Ændringen er blevet logget i tabellen employee_audits
af udløseren.
I denne vejledning har du lært at bruge PostgreSQL CREATE TRIGGER
til at oprette en ny trigger.
- Var denne vejledning nyttig?
- JaNej