位置:首頁 > 數據庫 > SQLite教學 > SQLite TRIGGERS/觸發器

SQLite TRIGGERS/觸發器

SQLite的觸發器是數據庫的回調函數,它會自動執行/指定的數據庫事件發生時調用。以下是關於SQLite的觸發器的要點:

  • SQLite的觸發器可以指定消防每當一個DELETE,INSERT或UPDATE一個特定的數據庫表時或在一個或多個指定表的列發生更新。

  • 這時,SQLite支持FOR EACH ROW觸發,冇有FOR EACH STATEMENT觸發器。因此,明確指定FOR EACH ROW是可選的。

  • WHEN子句和觸發器動作可能訪問的行元素被插入,刪除或更新使用的形式NEW.column名稱OLD.column-name,其中列名是從表中的列名的引用該觸發器相關聯的。

  • 如果提供WHEN子句指定的SQL語句隻執行的行的WHEN子句為真。如果冇有提供WHEN子句,SQL語句執行的所有行。

  • 決定何時觸發動作將被執行插入,修改或刪除相關的行之前或之後的關鍵字。

  • 觸發器表,它們丟棄時自動刪除。

  • 要修改的表必須存在,在同一數據庫中的表或視圖,觸發器被附加,必須使用表名不database.tablename。

  • 一個特殊的SQL函數RAISE() 可用於觸發器程序內引發異常。

語法

創建觸發器的基本語法如下:

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

在這裡,event_name 可能是INSERT,DELETE和UPDATE操作所提到的表table_name數據庫。您可以選擇指定FOR EACH ROW表名後。

以下是語法上創建一個觸發器UPDATE操作一個或多個指定一個表列如下:

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

例子

讓我們考慮一個情況下,我們要保持審核COMPANY表中的每一條記錄被插入我們新創建如下(如果已經擁有它,刪除COMPANY表)試用:

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

為了保持審計的試驗,我們將創建一個新的表被AUDIT將被插入日誌消息每當有一個新的記錄項表COMPANY:

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

在這裡,ID是的審計記錄ID,EMP_ID的ID將來自COMPANY表和日期將保持COMPANY表時的記錄將被創建時間戳。所以,現在讓我們創建一個觸發器,COMPANY表如下:

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

現在,我們將開始實際工作中,讓我們開始COMPANY表中插入記錄,這將導致在AUDIT表中創建審計日誌記錄。因此,讓我們創建一個COMPANY表記錄如下:

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

This will create one record in COMPANY table, which is as follows:

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

同時,將創造一個記錄AUDIT表中。這個紀錄是觸發的結果,這是我們對COMPANY表上創建INSERT操作。類似的方式,可以創建觸發器,UPDATE和DELETE操作根據要求。

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

列出TRIGGERS

可以列出所有觸發器從SQLITE_MASTER表如下:

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

以上SQLite的語句會列出隻有一個條目如下:

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

如果要列出特定表上的觸發器,然後使用AND子句及表名如下:

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

以上SQLite語句也會列出隻有一個條目如下:

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

刪除 TRIGGERS

以下是DROP命令,它可以用來刪除一個現有的觸發器:

sqlite> DROP TRIGGER trigger_name;