SQLite觸發器(刪除之前/之後)指定如何在刪除資料後執行觸發器。假設有兩個表:company
和audit
。
建立company
表的語句如下 -
CREATE TABLE company(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
建立audit
表的語句如下 -
CREATE TABLE audit(
EMP_ID INT NOT NULL,
BEFORE_VAL TEXT NULL,
ACTION_TYPE TEXT NULL,
ENTRY_DATE TEXT NOT NULL
);
建立刪除後觸發器:
在刪除操作後,使用以下語法在company
表上建立名為「after_del
」的觸發器,當刪除company
表中的一條記錄成功之後,就會將這條刪除的名稱記錄到audit
表中。
CREATE TRIGGER after_del AFTER DELETE
ON COMPANY
BEGIN
INSERT INTO AUDIT(EMP_ID, BEFORE_VAL, ACTION_TYPE, ENTRY_DATE) VALUES (old.ID, old.name, 'AFTER DELETE', datetime('now'));
END;
先插入一條資料,以供後面刪除使用 -
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Maxsu', 24, 'Haikou', 40000.00);
-- 刪除記錄,觸發上面定義的觸發器
delete from company where id=1;
-- 查詢刪除記錄的執行結果
select * from company;
-- 查詢刪除記錄之後的審計記錄情況
select * from audit;
完整的執行過程如下圖中所示 -