SQLite触发器(插入之前/之后)

编辑时间: 2018-02-07 12:55:29    关键字:

 SQLite插入之前或之后触发器指定了如何在插入数据后创建触发器。 假设有两个表:COMPANYAUDIT,在这里要对向COMPANY表中插入的每条记录进行审计。如果您已经有创建过一个COMPANY表,请将其删除并重新创建。

COMPANY的创建语句 -

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

创建一个名为AUDIT的新表,只要在向COMPANY表中插入新记录,就会插入日志消息:

AUDIT的创建语句 -

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

创建以上两个表,如下图所示 -

SQLite触发器:AFTER INSERT

在插入操作后,使用以下语法是在COMPANY表上创建名为“audit_log”的触发器。

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

这里,IDAUDIT表行记录的IDEMP_ID是来自COMPANY表的IDDATE字段是用于在COMPANY表中创建记录时保留时间戳。

现在向COMPANY表中插入一些记录,触发器将自动在AUDIT表中创建审核日志记录。

INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)   VALUES (1, 'Maxsu', 22, 'Haikou', 40000.00); 
SQL

执行上面语句后,同时会在AUDIT表中创建一条记录。 这只是因为在COMPANY表上的INSERT操作上创建的触发器。现在查询AUDIT表中的记录数据。

SELECT * FROM AUDIT; 
SQL

执行上面语句,结果如下所示 -

如何列出/查看触发器?

可以使用查询语句从sqlite_master表中来查询列出/查看触发器。

SELECT name FROM sqlite_master   WHERE type = 'trigger'; 
SQL

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

从上面结果中,可以看到触发器的名称。还可以使用AND子句列出特定表上的触发器。

SELECT name FROM sqlite_master   WHERE type = 'trigger' AND tbl_name = 'COMPANY'; 
SQL

执行上面查询,得到以下结果 -

SQLite触发器:BEFORE INSERT

如果要在插入数据之前创建触发器,可以使用以下语句 -

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

创建完成上面的触发器后,现在向COMPANY表中插入一条数据记录。

INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)   VALUES (2, 'Minsu', 28, 'Guangzhou', 35000.00); ``  现在,已经创建了两个触发器,一个是**BEFORE INSERT**,另一个是:**AFTER INSERT**,因此在向`COMPANY`表插入第二条记录时,`AUDIT`表中有生成两个记录。  ```sql SELECT * FROM AUDIT; 
SQL

检查创建的触发器:

SELECT name FROM sqlite_master   WHERE type = 'trigger' AND tbl_name = 'COMPANY'; 
SQL

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

sqlite> SELECT name FROM sqlite_master    ...> WHERE type = 'trigger' AND tbl_name = 'COMPANY'; audit_log befor_ins sqlite> 
Shell

以上面查询的结果中,可以看到已创建的两个触发器。

推荐热图

合作推荐

2010-2018 可思数据版权所有 About SYKV | ICP备案:京ICP备14056871号