SQLite觸發器(刪除之前/之後)


SQLite觸發器(刪除之前/之後)指定如何在刪除資料後執行觸發器。假設有兩個表:companyaudit

建立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;

完整的執行過程如下圖中所示 -