SQLite Trigger

SQLite Triggerist eine Callback-Funktion der Datenbank, die automatisch ausgeführt/aufgerufen wird, wenn das angegebene Datenbankereignis eintritt. Im Folgenden finden Sie die wichtigsten Punkte zu SQLite-Triggern:

  • SQLite-Trigger können so angegeben werden, dass sie bei DELETE, INSERT oder UPDATE einer bestimmten Datenbanktabelle ausgelöst werden, oder bei Aktualisierungen der Spalten einer oder mehrerer bestimmter Tabellen.

  • SQLite unterstützt nur FOR EACH ROW-Trigger, und es gibt keine FOR EACH STATEMENT-Trigger. Daher ist die explizite Angabe von FOR EACH ROW optional.

  • Die WHEN-Klausel und Trigger-Aktionen können unter Verwendung der FormNEW.column-nameundOLD.column-nameauf die Zeilenelemente zugreifen, die eingefügt, gelöscht oder aktualisiert werden, wobei column-name der Name einer Spalte aus der dem Trigger zugeordneten Tabelle ist.

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

  • Die Schlüsselwörter BEFORE oder AFTER bestimmen, wann Trigger-Aktionen ausgeführt werden, und entscheiden, ob sie vor oder nach dem Einfügen, Ändern oder Löschen der zugehörigen Zeile ausgeführt werden.

  • Wenn die dem Trigger zugeordnete Tabelle gelöscht wird, wird der Trigger automatisch gelöscht.

  • Die zu ändernde Tabelle muss in derselben Datenbank wie die Tabelle oder Ansicht existieren, an die der Trigger angehängt ist, und darf nurtablename, nichtdatabase.tablename verwenden。

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

Syntax

Erstellen einesTriggersDie grundlegende Syntax lautet wie folgt:

CREATE  TRIGGER trigger_name [BEFORE|AFTER] event_name 
ON table_name
BEGIN
 -- 触发器逻辑....
END;

Hier kannevent_nameeine Operation auf der genannten Tabelletable_namebeiINSERT, DELETE und UPDATE seinDatenbankoperation. Sie können optional FOR EACH ROW nach dem Tabellennamen angeben.

Das Folgende ist die Syntax zum Erstellen eines Triggers auf einer oder mehreren angegebenen Spalten einer Tabelle für UPDATE-Operationen:

CREATE  TRIGGER trigger_name [BEFORE|AFTER] UPDATE OF column_name 
ON table_name
BEGIN
 -- 触发器逻辑....
END;

Beispiele

Nehmen wir an, wir möchten einen Audit-Trail für jeden Datensatz führen, der in eine neu erstellte COMPANY-Tabelle eingefügt wird (falls sie bereits existiert, löschen und neu erstellen):

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-Trail zu führen, erstellen wir eine neue Tabelle namens AUDIT. Immer wenn ein neuer Datensatz in die COMPANY-Tabelle eingefügt wird, wird eine Protokollnachricht darin eingefügt:

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

Hier ist ID die ID des AUDIT-Datensatzes, EMP_ID ist die ID aus der COMPANY-Tabelle, und DATE enthält den Zeitstempel, wann der Datensatz in COMPANY erstellt wurde. Nun lassen Sie uns einen Trigger für die COMPANY-Tabelle wie folgt erstellen:

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 damit, Datensätze in die COMPANY-Tabelle einzufügen, wodurch ein Audit-Log-Datensatz in der AUDIT-Tabelle erstellt wird. Daher lassen Sie uns einen Datensatz in der COMPANY-Tabelle wie folgt erstellen:

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

Dadurch wird der folgende Datensatz in der COMPANY-Tabelle erstellt:

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 des Triggers, den wir für die INSERT-Operation auf der COMPANY-Tabelle erstellt haben. Ebenso können Trigger für UPDATE- und DELETE-Operationen nach Bedarf erstellt werden.

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

Trigger auflisten (TRIGGERS)

Sie können alle Trigger aus dersqlite_master-Tabelle wie folgt auflisten:

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

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

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

Wenn Sie Trigger für eine bestimmte Tabelle auflisten möchten, verwenden Sie die AND-Klausel, um den Tabellennamen zu verketten, wie folgt:

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

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

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

Trigger löschen (TRIGGERS)

Nachfolgend sehen Sie den DROP-Befehl, der zum Löschen vorhandener Trigger verwendet werden kann:

sqlite> DROP TRIGGER trigger_name;
Andere Erweiterungen