SQLite触发器(更新之前/之后)

SQLite触发器(更新之前/之后)指定了如何在更新数据后执行触发器操作。 假设有两个表companyaudit,在这里要对在company表中的每个记录更新时进行审核。

创建company表的语句 –

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

创建一个名为audit的新表,用于在company表中有更新时插入日志消息。

CREATE TABLE audit(  
    EMP_ID INT NOT NULL,
    ACTION_TYPE TEXT NOT NULL,
    ENTRY_DATE TEXT NOT NULL  
);

创建更新后的触发器:

使用以下语法创建名为“after_up”的触发器,在COMPANY表上更新操作后触发此触发器。

CREATE TRIGGER after_up AFTER UPDATE   
ON COMPANY  
BEGIN  
INSERT INTO AUDIT(EMP_ID, ACTION_TYPE, ENTRY_DATE) VALUES (new.ID, 'AFTER UPDATE', datetime('now'));  
END;

现在更新一条记录数据,如下:

UPDATE COMPANY SET ADDRESS = 'Shenzhen' WHERE ID = 1;

查看已创建的触发器 –

SELECT name FROM sqlite_master  WHERE type = 'trigger';

执行上面语句,看到以下结果 –

《SQLite触发器(更新之前/之后)》

SQLite触发器:在UPDATE之前

如果要创建在更新数据之前的触发器,请参考以下语句 –

CREATE TRIGGER befor_up BEFORE UPDATE   
ON COMPANY  
BEGIN  
INSERT INTO AUDIT(EMP_ID, ACTION_TYPE, ENTRY_DATE) VALUES (new.ID, old.ADDRESS , datetime('now'));  
END;

注意:上面的两个关键字:newold,它们分别表示新插入的行记录和表中已存在行记录。

现在更新一条记录数据,如下:

UPDATE COMPANY SET ADDRESS = 'Beijing' WHERE ID = 1;

查询审计表:audit中的记录信息,如下所示 –

sqlite> select * from audit;
1|AFTER INSERT|2017-05-25 13:39:32
2|BEFORE INSERT|2017-05-25 13:41:50
2|AFTER INSERT|2017-05-25 13:41:50
1|AFTER UPDATE|2017-05-25 14:14:00
1|Shenzhen|2017-05-25 14:18:19 -- 使用旧行的Address值写入
1|AFTER UPDATE|2017-05-25 14:18:19
sqlite>

执行上面语句创建触发器,查看上面创建的触发器 –

SELECT name FROM sqlite_master  WHERE type = 'trigger';

执行上面语句,得到以下结果 –

《SQLite触发器(更新之前/之后)》

        原文作者:SQLite教程
        原文地址: https://www.yiibai.com/sqlite/trigger-after-update.html
        本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
    点赞