SQLite TRIGGERS/觸發器 [動態紀錄資料庫變動]
SQLite TRIGGERS/觸發器 [動態紀錄資料庫變動]
資料來源:http://tw.gitbook.net/sqlite/sqlite_triggers.html
例子
01. 讓我們考慮一個情況下,我們要保持審核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
);
02. 為了保持審計的試驗,我們將創建一個新的表被AUDIT將被插入日誌消息每當有一個新的記錄項表COMPANY:
sqlite> CREATE TABLE AUDIT(
EMP_ID INT NOT NULL,
ENTRY_DATE TEXT NOT NULL
);
03. 在這裡,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;
04. 現在,我們將開始實際工作中,讓我們開始COMPANY表中插入記錄,這將導致在AUDIT表中創建審計日誌記錄。因此,讓我們創建一個COMPANY表記錄如下:
sqlite> INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, ‘Paul’, 32, ‘California’, 20000.00 );
05. 列出TRIGGERS-可以列出所有觸發器從SQLITE_MASTER表如下:
sqlite> SELECT name FROM sqlite_master WHERE type = ‘trigger’;
以上SQLite語句也會列出隻有一個條目如下:
name
———-
audit_log
06. 如果要列出特定表上的觸發器,然後使用AND子句及表名如下:
sqlite> SELECT name FROM sqlite_master WHERE type = ‘trigger’ AND tbl_name = ‘COMPANY’;
以上SQLite語句也會列出隻有一個條目如下:
name
———-
audit_log
07. 刪除 TRIGGERS-以下是DROP命令,它可以用來刪除一個現有的觸發器:
sqlite> DROP TRIGGER trigger_name;