Samenvatting: in deze tutorial leert u hoe u het PostgreSQL CREATE TRIGGER
statement gebruikt om een trigger te maken.
Om een nieuwe trigger in PostgreSQL te maken, volgt u deze stappen:
- Eerst, maak een trigger functie met behulp van
CREATE FUNCTION
statement. - Tweede, bind de trigger functie aan een tabel met behulp van
CREATE TRIGGER
statement.
Als u niet bekend bent met het maken van een door de gebruiker gedefinieerde functie, kunt u kijken op de PL/pgSQL sectie.
Create trigger functie syntax
Een trigger functie is vergelijkbaar met een gewone door de gebruiker gedefinieerde functie. Echter, een trigger functie neemt geen argumenten en heeft een return waarde met het type trigger
.
Het volgende illustreert de syntaxis van het maken van trigger functie:
Code language: SQL (Structured Query Language) (sql)
Merk op dat u een trigger functie kunt maken met behulp van elke taal die door PostgreSQL wordt ondersteund. In deze tutorial gebruiken we PL/pgSQL.
Een trigger functie ontvangt gegevens over zijn aanroepende omgeving via een speciale structuur genaamd TriggerData die een set van lokale variabelen bevat.
Bijvoorbeeld OLD
en NEW
vertegenwoordigen de staten van de rij in de tabel voor of na de triggerende gebeurtenis.
PostgreSQL biedt ook andere lokale variabelen, voorafgegaan door TG_
, zoals TG_WHEN
, en TG_TABLE_NAME
.
Als u eenmaal een trigger-functie hebt gedefinieerd, kunt u deze binden aan een of meer trigger-gebeurtenissen, zoals INSERT
, UPDATE
, en DELETE
.
Inleiding tot PostgreSQL CREATE TRIGGER statement
Het CREATE TRIGGER
statement creëert een nieuwe trigger. Het volgende illustreert de basis syntaxis van het CREATE TRIGGER
statement:
Code language: SQL (Structured Query Language) (sql)
In deze syntaxis:
Eerst, specificeer de naam van de trigger na de TRIGGER
keywords.
Tweede, specificeer de timing die ervoor zorgt dat de trigger afgaat. Het kan BEFORE
of AFTER
een gebeurtenis optreedt.
Derde, specificeer de gebeurtenis die de trigger oproept. De gebeurtenis kan zijn INSERT
, DELETE
, UPDATE
of TRUNCATE
.
Vierde, specificeer de naam van de tabel geassocieerd met de trigger na de ON
sleutelwoord.
Vijfde, geef het type van de triggers die kunnen zijn:
- Row-niveau trigger die wordt gespecificeerd door de
FOR EACH ROW
clausule. - Statement-niveau trigger die wordt gespecificeerd door de
FOR EACH STATEMENT
clausule.
Een trigger op rijniveau wordt afgevuurd voor elke rij, terwijl een trigger op statement-niveau wordt afgevuurd voor elke transactie.
Voorstel dat een tabel 100 rijen heeft en twee triggers die worden afgevuurd wanneer een DELETE
-gebeurtenis optreedt.
Als het DELETE
-instructie 100 rijen verwijdert, zal de trigger op rijniveau 100 keer afgaan, eenmaal voor elke verwijderde rij. Een trigger op statement-niveau daarentegen wordt één keer afgevuurd, ongeacht het aantal rijen dat wordt verwijderd.
Specificeer tenslotte de naam van de trigger-functie na de EXECUTE PROCEDURE
-keywords.
PostgreSQL CREATE TRIGGER voorbeeld
Het volgende statement creëert een nieuwe tabel genaamd employees
:
Code language: SQL (Structured Query Language) (sql)
Voorstel dat wanneer de naam van een werknemer verandert, u de wijzigingen in een aparte tabel genaamd employee_audits
wilt loggen:
Code language: SQL (Structured Query Language) (sql)
Maak eerst een nieuwe functie met de naam log_last_name_changes
:
Code language: SQL (Structured Query Language) (sql)
De functie voegt de oude achternaam in de tabel employee_audits
in, inclusief werknemers-id, achternaam, en het tijdstip van wijziging als de achternaam van een werknemer verandert.
De OLD
vertegenwoordigt de rij vóór bijwerking terwijl de NEW
de nieuwe rij vertegenwoordigt die zal worden bijgewerkt. De OLD.last_name
geeft de achternaam vóór de update en de NEW.last_name
geeft de nieuwe achternaam.
Tweede, bind de trigger functie aan de employees
tabel. De naam van de trigger is last_name_changes
. Voordat de waarde van de kolom last_name
wordt bijgewerkt, wordt de trigger-functie automatisch aangeroepen om de wijzigingen te loggen.
Code language: SQL (Structured Query Language) (sql)
Derde, voeg enkele rijen in de tabel employees
in:
Code language: SQL (Structured Query Language) (sql)
Vierde, onderzoek de inhoud van de tabel employees
:
Code language: SQL (Structured Query Language) (sql)
Voorstel dat Lily Bush
haar achternaam wijzigt in Lily Brown
.
Vijfde, werk Lily’s achternaam bij naar de nieuwe naam:
Code language: SQL (Structured Query Language) (sql)
Zevende, controleer of de achternaam van Lily
is bijgewerkt:
Code language: SQL (Structured Query Language) (sql)
Zoals u in de uitvoer kunt zien, is Lily’s achternaam bijgewerkt.
Ten achtste controleert u de inhoud van de tabel employee_audits
:
Code language: SQL (Structured Query Language) (sql)
De wijziging is door de trigger in de tabel employee_audits
vastgelegd.
In deze zelfstudie hebt u geleerd hoe u de PostgreSQL CREATE TRIGGER
kunt gebruiken om een nieuwe trigger te maken.
- Was deze zelfstudie nuttig ?
- JaNee