Rezumat: în acest tutorial, veți învăța cum să utilizați instrucțiunea CREATE TRIGGER
PostgreSQL pentru a crea un trigger.
Pentru a crea un nou trigger în PostgreSQL, urmați acești pași:
- În primul rând, creați o funcție trigger utilizând instrucțiunea
CREATE FUNCTION
. - În al doilea rând, legați funcția de declanșare la o tabelă folosind instrucțiunea .
Dacă nu sunteți familiarizat cu crearea unei funcții definite de utilizator, puteți consulta secțiunea PL/pgSQL.
Sintaxa funcției de declanșare a creării
O funcție de declanșare este similară cu o funcție obișnuită definită de utilizator. Cu toate acestea, o funcție de declanșare nu acceptă argumente și are o valoare de retur cu tipul trigger
.
În cele ce urmează se ilustrează sintaxa de creare a unei funcții de declanșare:
Code language: SQL (Structured Query Language) (sql)
Rețineți că puteți crea o funcție de declanșare utilizând orice limbaje acceptate de PostgreSQL. În acest tutorial, vom folosi PL/pgSQL.
O funcție de declanșare primește date despre mediul său de apelare printr-o structură specială numită TriggerData care conține un set de variabile locale.
De exemplu, OLD
și NEW
reprezintă stările rândului din tabel înainte sau după evenimentul de declanșare.
PostgreSQL oferă și alte variabile locale precedate de TG_
, cum ar fi TG_WHEN
, și TG_TABLE_NAME
.
După ce definiți o funcție de declanșare, o puteți lega la unul sau mai multe evenimente de declanșare, cum ar fi INSERT
, UPDATE
și DELETE
.
Introducere la PostgreSQL Instrucțiunea CREATE TRIGGER
Instrucțiunea CREATE TRIGGER
creează un nou declanșator. Următoarele ilustrează sintaxa de bază a instrucțiunii :
Code language: SQL (Structured Query Language) (sql)
În această sintaxă:
În primul rând, specificați numele declanșatorului după cuvintele cheie TRIGGER
.
În al doilea rând, specificați sincronizarea care determină declanșarea declanșatorului. Poate fi BEFORE
sau AFTER
se produce un eveniment.
În al treilea rând, specificați evenimentul care invocă declanșatorul. Evenimentul poate fi INSERT
, DELETE
, UPDATE
sau TRUNCATE
.
În al patrulea rând, specificați numele tabelului asociat cu declanșatorul după cuvântul cheie ON
.
În al cincilea rând, specificați tipul de declanșator care poate fi:
- Dezvăluire la nivel de rând care este specificată prin clauza
FOR EACH ROW
. - Dezvăluire la nivel de statură care este specificată prin clauza
FOR EACH STATEMENT
.
Un declanșator la nivel de rând este declanșat pentru fiecare rând, în timp ce un declanșator la nivel de instrucțiune este declanșat pentru fiecare tranzacție.
Să presupunem că o tabelă are 100 de rânduri și două declanșatoare care vor fi declanșate atunci când are loc un eveniment DELETE
.
Dacă instrucțiunea DELETE
șterge 100 de rânduri, declanșatorul la nivel de rând se va declanșa de 100 de ori, o dată pentru fiecare rând șters. Pe de altă parte, un declanșator la nivel de instrucțiune va fi declanșat o singură dată, indiferent de câte rânduri sunt șterse.
În cele din urmă, specificați numele funcției de declanșare după cuvintele cheie EXECUTE PROCEDURE
.
PostgreSQL CREATE TRIGGER exemplu
Exemplul următor creează un tabel nou numit employees
:
Code language: SQL (Structured Query Language) (sql)
Să presupunem că atunci când numele unui angajat se schimbă, doriți să înregistrați modificările într-un tabel separat numit employee_audits
:
Code language: SQL (Structured Query Language) (sql)
În primul rând, creați o nouă funcție numită log_last_name_changes
:
Code language: SQL (Structured Query Language) (sql)
Funcția inserează vechiul nume de familie în tabelul employee_audits
, inclusiv ID-ul angajatului, numele de familie și ora modificării, dacă se schimbă numele de familie al unui angajat.
Rândul OLD
reprezintă rândul înainte de actualizare, în timp ce NEW
reprezintă noul rând care va fi actualizat. OLD.last_name
returnează numele de familie înainte de actualizare, iar NEW.last_name
returnează noul nume de familie.
În al doilea rând, legați funcția de declanșare la tabelul employees
. Numele declanșatorului este last_name_changes
. Înainte ca valoarea coloanei last_name
să fie actualizată, funcția trigger este invocată automat pentru a înregistra modificările.
Code language: SQL (Structured Query Language) (sql)
În al treilea rând, introduceți câteva rânduri în tabelul employees
:
Code language: SQL (Structured Query Language) (sql)
În al patrulea rând, examinați conținutul tabelului employees
:
Code language: SQL (Structured Query Language) (sql)
Să presupunem că Lily Bush
își schimbă numele de familie în Lily Brown
.
În al cincilea rând, actualizați numele de familie al lui Lily cu cel nou:
Code language: SQL (Structured Query Language) (sql)
În al șaptelea rând, verificați dacă numele de familie al lui Lily
a fost actualizat:
Code language: SQL (Structured Query Language) (sql)
După cum puteți vedea din rezultat, numele de familie al lui Lily a fost actualizat.
În al optulea rând, verificați conținutul tabelului employee_audits
:
Code language: SQL (Structured Query Language) (sql)
Modificarea a fost înregistrată în tabelul employee_audits
de către trigger.
În acest tutorial, ați învățat cum să utilizați PostgreSQL CREATE TRIGGER
pentru a crea un nou trigger.
- A fost util acest tutorial?
- DaNu
.