SQLite 创建触发器 CREATE TRIGGER
如果要创建一个触发器,可以使用 CREATE TRIGGER
关键字
语法如下
CREATE TRIGGER trigger_name [BEFORE|AFTER] event_name ON table_name [FOR EACH ROW] BEGIN -- Trigger logic goes here.... END;
-
event_name
是指在表table_name
上执行的操作,可以是INSERT
、DELETE
、UPDATE
-
[BEFORE|AFTER]
是指在执行操作之前触发还是执行操作之后触发 -
-- Trigger logic goes here....
只能是一些 SQL 语句
例如下面的 SQL 语句是在表 tbl_employee
上插入一条或者多条数据时触发一些操作
CREATE TRIGGER trigger_name [BEFORE|AFTER] UPDATE ON tbl_employee BEGIN -- Trigger logic goes here.... END;
范例
先运行下面的 SQL 语句创建测试数据
有两张表,一张是职工表,一张是日志表,每当职工表数据有新增时插入日志,用于审计
DROP TABLE tbl_employee; DROP TABLE tbl_employee_log; CREATE TABLE tbl_employee ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, name CHAR(64) NOT NULL, age INTEGER NOT NULL, city CHAR(64), salary REAL ); CREATE TABLE tbl_employee_log( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, emp_id INT NOT NULL, created_at CHAR(19) NOT NULL );
我们先在表 tbl_employee
上创建一个插入触发器
CREATE TRIGGER trigger_employee_insert AFTER INSERT ON tbl_employee BEGIN INSERT INTO tbl_employee_log(emp_id, created_at) VALUES (new.id, strftime('%Y-%m-%d %H:%M:%S','now')); END;
现在,如果我么往表 tbl_employee
中插入数据,它将在表 tbl_employee_log
创建一条日志
INSERT INTO tbl_employee (name,age,city,salary) VALUES ('张三', 25, 'pek', 102400.00 );
这将在 tbl_employee
表中创建如下一个记录
sqlite> SELECT * FROM tbl_employee; id name age city salary ---------- ---------- ---------- ---------- ---------- 1 张三 25 pek 102400.0
同时,会在 tbl_employee_log
表中创建一个记录
sqlite> SELECT * FROM tbl_employee_log; id emp_id created_at ---------- ---------- ------------------- 1 1 2018-04-16 13:42:15
这个纪录是触发器的结果
类似的,可以根据需要在 UPDATE 和 DELETE 操作上创建触发器 ( Trigger )