SQLite - Trigger

SQLite Triggerssind Datenbank-Rückruffunktionen, die automatisch ausgeführt / aufgerufen werden, wenn ein bestimmtes Datenbankereignis auftritt. Im Folgenden sind die wichtigen Punkte zu SQLite-Triggern aufgeführt:

  • Der SQLite-Trigger kann so festgelegt werden, dass er immer dann ausgelöst wird, wenn ein DELETE, INSERT oder UPDATE einer bestimmten Datenbanktabelle auftritt oder wenn ein UPDATE in einer oder mehreren angegebenen Spalten einer Tabelle auftritt.

  • Derzeit unterstützt SQLite nur FOR EACH ROW-Trigger, nicht FOR EACH STATEMENT-Trigger. Daher ist die explizite Angabe von FOR EACH ROW optional.

  • Sowohl die WHEN-Klausel als auch die Triggeraktionen können mithilfe von Verweisen auf das Formular auf Elemente der Zeile zugreifen, die eingefügt, gelöscht oder aktualisiert werden NEW.column-name und OLD.column-nameDabei ist Spaltenname der Name einer Spalte aus der Tabelle, der der Trigger zugeordnet ist.

  • Wenn eine WHEN-Klausel angegeben wird, werden die angegebenen SQL-Anweisungen nur für Zeilen ausgeführt, für die die WHEN-Klausel wahr ist. Wenn keine WHEN-Klausel angegeben wird, werden die SQL-Anweisungen für alle Zeilen ausgeführt.

  • Das Schlüsselwort BEFORE oder AFTER bestimmt, wann die Triggeraktionen in Bezug auf das Einfügen, Ändern oder Entfernen der zugehörigen Zeile ausgeführt werden.

  • Trigger werden automatisch gelöscht, wenn die Tabelle, der sie zugeordnet sind, gelöscht wird.

  • Die zu ändernde Tabelle muss in derselben Datenbank vorhanden sein wie die Tabelle oder Ansicht, an die der Trigger angehängt ist, und muss nur verwendet werden tablename nicht database.tablename.

  • Eine spezielle SQL-Funktion RAISE () kann innerhalb eines Triggerprogramms verwendet werden, um eine Ausnahme auszulösen.

Syntax

Im Folgenden finden Sie die grundlegende Syntax zum Erstellen von a trigger.

CREATE TRIGGER trigger_name [BEFORE|AFTER] event_name 
ON table_name
BEGIN
 -- Trigger logic goes here....
END;

Hier, event_namekönnte INSERT, DELETE, und UPDATE Datenbankoperation auf der genannten Tabelletable_name. Sie können optional FÜR JEDE REIHE nach dem Tabellennamen angeben.

Im Folgenden finden Sie die Syntax zum Erstellen eines Triggers für eine UPDATE-Operation für eine oder mehrere angegebene Spalten einer Tabelle.

CREATE TRIGGER trigger_name [BEFORE|AFTER] UPDATE OF column_name 
ON table_name
BEGIN
   -- Trigger logic goes here....
END;

Beispiel

Betrachten wir einen Fall, in dem wir den Audit-Test für jeden Datensatz, der in die COMPANY-Tabelle eingefügt wird, fortsetzen möchten, den wir wie folgt neu erstellen (Drop COMPANY-Tabelle, falls Sie sie bereits haben).

sqlite> CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

Um den Audit-Test fortzusetzen, erstellen wir eine neue Tabelle mit dem Namen AUDIT, in die die Protokollnachrichten eingefügt werden, wenn in der COMPANY-Tabelle ein Eintrag für einen neuen Datensatz vorhanden ist.

sqlite> CREATE TABLE AUDIT(
   EMP_ID INT NOT NULL,
   ENTRY_DATE TEXT NOT NULL
);

Hier ist ID die AUDIT-Datensatz-ID und EMP_ID ist die ID, die aus der COMPANY-Tabelle stammt, und DATE behält den Zeitstempel bei, wenn der Datensatz in der COMPANY-Tabelle erstellt wird. Erstellen wir nun einen Trigger für die COMPANY-Tabelle wie folgt:

sqlite> CREATE TRIGGER audit_log AFTER INSERT 
ON COMPANY
BEGIN
   INSERT INTO AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, datetime('now'));
END;

Jetzt beginnen wir mit der eigentlichen Arbeit. Beginnen wir mit dem Einfügen eines Datensatzes in die COMPANY-Tabelle, der zur Erstellung eines Überwachungsprotokolldatensatzes in der AUDIT-Tabelle führen soll. Erstellen Sie einen Datensatz in der COMPANY-Tabelle wie folgt:

sqlite> INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Paul', 32, 'California', 20000.00 );

Dadurch wird ein Datensatz in der COMPANY-Tabelle erstellt, der wie folgt lautet:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0

Gleichzeitig wird ein Datensatz in der AUDIT-Tabelle erstellt. Dieser Datensatz ist das Ergebnis eines Triggers, den wir bei der INSERT-Operation in der COMPANY-Tabelle erstellt haben. Ebenso können Sie Ihre Trigger für UPDATE- und DELETE-Vorgänge basierend auf Ihren Anforderungen erstellen.

EMP_ID      ENTRY_DATE
----------  -------------------
1           2013-04-05 06:26:00

Trigger auflisten

Sie können alle Trigger von auflisten sqlite_master Tabelle wie folgt -

sqlite> SELECT name FROM sqlite_master
WHERE type = 'trigger';

Die obige SQLite-Anweisung listet nur einen Eintrag wie folgt auf:

name
----------
audit_log

Wenn Sie Trigger für eine bestimmte Tabelle auflisten möchten, verwenden Sie die AND-Klausel mit dem Tabellennamen wie folgt:

sqlite> SELECT name FROM sqlite_master
WHERE type = 'trigger' AND tbl_name = 'COMPANY';

Die obige SQLite-Anweisung listet auch nur einen Eintrag wie folgt auf:

name
----------
audit_log

Trigger fallen lassen

Es folgt der Befehl DROP, mit dem ein vorhandener Trigger gelöscht werden kann.

sqlite> DROP TRIGGER trigger_name;