Sammanfattning: I den här handledningen lär du dig hur du använder PostgreSQL CREATE TRIGGER
-anvisningen för att skapa en trigger.
För att skapa en ny trigger i PostgreSQL följer du de här stegen:
- För det första skapar du en triggerfunktion med
CREATE FUNCTION
-anvisning. - För det andra binder du triggerfunktionen till en tabell med hjälp av
CREATE TRIGGER
-anvisningen.
Om du inte är bekant med att skapa en användardefinierad funktion kan du kolla in PL/pgSQL-avsnittet.
Skapa syntax för triggerfunktionen
En triggerfunktion liknar en vanlig användardefinierad funktion. En triggerfunktion tar dock inte emot några argument och har ett returvärde med typen trigger
.
Nedan illustreras syntaxen för att skapa en triggerfunktion:
Code language: SQL (Structured Query Language) (sql)
Observera att du kan skapa en triggerfunktion med hjälp av alla språk som stöds av PostgreSQL. I den här handledningen kommer vi att använda PL/pgSQL.
En triggerfunktion tar emot data om sin anropande miljö genom en speciell struktur som kallas TriggerData och som innehåller en uppsättning lokala variabler.
Till exempel representerar OLD
och NEW
tillstånden för raden i tabellen före eller efter den utlösande händelsen.
PostgreSQL tillhandahåller även andra lokala variabler som föregås av TG_
såsom TG_WHEN
och TG_TABLE_NAME
.
När du har definierat en utlösarfunktion kan du binda den till en eller flera utlösarhändelser såsom INSERT
, UPDATE
och DELETE
.
Introduktion till PostgreSQL CREATE TRIGGER-anvisningen
Anvisningen CREATE TRIGGER
skapar en ny trigger. Följande illustrerar den grundläggande syntaxen för CREATE TRIGGER
-anvisningen:
Code language: SQL (Structured Query Language) (sql)
I den här syntaxen:
Först anger du namnet på utlösaren efter TRIGGER
-nyckelorden.
Först anger du tidpunkten som gör att utlösaren utlöses. Det kan vara BEFORE
eller AFTER
en händelse inträffar.
Tredje, ange den händelse som åberopar utlösaren. Händelsen kan vara INSERT
, DELETE
, UPDATE
eller TRUNCATE
.
Fjärde, ange namnet på den tabell som är associerad med utlösaren efter nyckelordet ON
.
Femte, ange typen av utlösare som kan vara:
- Utlösare på radnivå som specificeras av
FOR EACH ROW
-klausulen. - Utlösare på statusnivå som specificeras av
FOR EACH STATEMENT
-klausulen.
En utlösare på radnivå utlöses för varje rad medan en utlösare på utsaganivå utlöses för varje transaktion.
Antag att en tabell har 100 rader och två utlösare som utlöses när en DELETE
-händelse inträffar.
Om DELETE
-uttalandet raderar 100 rader utlöses utlösaren på radnivå 100 gånger, en gång för varje raderad rad. Å andra sidan kommer en utlösare på statementnivå att utlösas en gång oavsett hur många rader som tas bort.
Slutligen anger du namnet på utlösarfunktionen efter nyckelorden EXECUTE PROCEDURE
.
PostgreSQL CREATE TRIGGER exempel
Följande anvisning skapar en ny tabell som heter employees
:
Code language: SQL (Structured Query Language) (sql)
Antag att när namnet på en anställd ändras vill du logga ändringarna i en separat tabell som heter employee_audits
:
Code language: SQL (Structured Query Language) (sql)
Skapa först en ny funktion som heter log_last_name_changes
:
Code language: SQL (Structured Query Language) (sql)
Funktionen infogar det gamla efternamnet i tabellen employee_audits
inklusive medarbetar-id, efternamn och tidpunkt för ändringen om en anställds efternamn ändras.
OLD
representerar raden före uppdatering medan NEW
representerar den nya raden som kommer att uppdateras. OLD.last_name
returnerar efternamnet före uppdateringen och NEW.last_name
returnerar det nya efternamnet.
För det andra binder du triggerfunktionen till tabellen employees
. Utlösarnamnet är last_name_changes
. Innan värdet i kolumnen last_name
uppdateras anropas triggerfunktionen automatiskt för att logga ändringarna.
Code language: SQL (Structured Query Language) (sql)
För det tredje infogar du några rader i tabellen employees
:
Code language: SQL (Structured Query Language) (sql)
För det fjärde undersöker du innehållet i tabellen employees
:
Code language: SQL (Structured Query Language) (sql)
Förutsätt att Lily Bush
ändrar sitt efternamn till Lily Brown
.
Femte, uppdatera Lilys efternamn till det nya:
Code language: SQL (Structured Query Language) (sql)
Sjunde, kontrollera om Lily
s efternamn har uppdaterats:
Code language: SQL (Structured Query Language) (sql)
Som du kan se i utmatningen har Lilys efternamn uppdaterats.
Attonde, kontrollera innehållet i tabellen employee_audits
:
Code language: SQL (Structured Query Language) (sql)
Förändringen loggades i tabellen employee_audits
av utlösaren.
I den här handledningen har du lärt dig hur du använder PostgreSQL CREATE TRIGGER
för att skapa en ny trigger.
- Har den här handledningen varit till hjälp?
- JaNej