SQLite触发器(更新之前/之后)指定了如何在更新数据后执行触发器操作。 假设有两个表company
和audit
,在这里要对在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触发器:在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;
注意:上面的两个关键字:
new
和old
,它们分别表示新插入的行记录和表中已存在行记录。
现在更新一条记录数据,如下:
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快速入门