English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SQLite -Trigger (Trigger)

Trigger von SQLite sind Datenbank-Rückruffunktionen, die automatisch ausgeführt werden, wenn bestimmte Datenbankereignisse auftreten./Diese Funktionen aufrufen. Hier sind die wichtigsten Punkte zu SQLite-Trigger.-

  • Die Trigger (Trigger) von SQLite können angegeben werden, um ausgelöst zu werden, wenn in einer bestimmten Datenbanktabelle DELETE, INSERT oder UPDATE durchgeführt wird, oder wenn Änderungen an einer oder mehreren指定的表的列vorgenommen werden.

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

  • Der WHEN-Ausdruck und die Trigger-Aktion können Formen verwenden, die mit dem Table} NEW.column-name und OLD.column-name Referenz des Elements der eingefügten, gelöschten oder aktualisierten Zeile, wobei column-name ist der Name der Spalte der mit dem Trigger verbundenen Table.

  • Falls ein WHEN-Ausdruck bereitgestellt wird, wird der SQL-Ausdruck nur für die Zeilen ausgeführt, für die der WHEN-Ausdruck wahr ist. Wird kein WHEN-Ausdruck bereitgestellt, wird der SQL-Ausdruck für alle Zeilen ausgeführt.

  • Die Schlüsselwörter BEFORE oder AFTER bestimmen, zu welcher Zeit der Trigger-Aktion ausgeführt wird, ob dies vor der Einfügung, Änderung oder Löschung der verknüpften Zeile erfolgt.

  • Wenn das Table, mit dem der Trigger verbunden ist, gelöscht wird, wird der Trigger (Trigger) automatisch gelöscht.

  • Das zu ändernde Table muss im selben Datenbank existieren, als Table oder View, an die der Trigger angehängt wird, und muss nur mit tablename, anstatt database.tablename.

  • Eine spezielle SQL-Funktion RAISE() kann im Trigger-Programm zum Auswerfen von Ausnahmen verwendet werden.

Syntax

Hier ist die Grundsyntax für die Erstellung eines Triggers.

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

Hier,event_namekönnen für die oben genannten Tabellen seinINSERT, DELETEundUPDATEDatenbankoperationentable_name. Sie können FOR EACH ROW nach dem Tabellennamen angeben.

Hier ist die Syntax für die Erstellung eines Triggers auf einem oder mehreren spezifischen Spalten eines Tables.

CREATE TRIGGER trigger_name [BEFORE|AFTER] UPDATE OF column_name 
ON table_name
BEGIN
   -- Trigger-Logik ist hier....
END;

Beispiel

Lassen Sie uns eine Situation in Betracht ziehen, bei der wir eine Audittestung für jede Zeile, die in die Tabelle COMPANY eingefügt wird, durchführen möchten, die wir neu erstellt haben (falls sie bereits existiert, wird die Tabelle COMPANY gelöscht).

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-Status beizubehalten, erstellen wir eine neue Tabelle namens AUDIT, in die wir Log-Nachrichten einfügen, solange es neue Einträge in der COMPANY-Tabelle gibt.

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

Hierbei ist ID der ID des AUDIT-Eintrags, EMP_ID ist die ID aus der COMPANY-Tabelle und DATE behält den Zeitstempel bei, wenn ein Eintrag in der COMPANY-Tabelle erstellt wird. Lassen Sie uns nun einen Trigger auf der COMPANY-Tabelle erstellen, 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;

Nun beginnen wir mit der tatsächlichen Arbeit, lassen Sie uns beginnen, Einträge in der COMPANY-Tabelle einzufügen, was zur Erstellung eines Audit-Log-Eintrags in der AUDIT-Tabelle führt. Ein Eintrag in der COMPANY-Tabelle erstellen, wie folgt:-

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

Dies erstellt einen Eintrag in der COMPANY-Tabelle, wie folgt:-

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

Gleichzeitig wird ein Eintrag im AUDIT-Tabelle erstellt. Dies ist das Ergebnis des Triggers, den wir für die INSERT-Operation in der COMPANY-Tabelle erstellt haben. Ebenso können Sie Trigger für UPDATE- und DELETE-Operationen erstellen, falls erforderlich.

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

Trigger auflisten

Sie könnensqlite_masterAlle Trigger in der Tabelle sind wie folgt aufgelistet:

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

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

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

Um Trigger auf einer bestimmten Tabelle aufzulisten, verwenden Sie den AND-Operator und den Tabellenamen, wie folgt:

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

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

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

Trigger löschen

Nachstehend ist der DROP-Befehl, der zum Löschen vorhandener Trigger verwendet werden kann.

sqlite> DROP TRIGGER trigger_name;