SQLite After Insert
它指定如何在插入数据后创建触发器。假设我们有两个表COMPANY和AUDIT,在这里我们要为新创建的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
);
创建一个名为AUDIT的新表,只要在COMPANY表中有新记录的条目,就会在其中插入日志消息:
AUDIT表:
CREATE TABLE AUDIT(
EMP_ID int NOT null,
ENTRY_DATE TEXT NOT null
);
在插入后创建触发器:
在插入操作之后,使用以下语法在COMPANY表上创建名为" audit_log"的触发器。
CREATE TRIGGER audit_log AFTER INSERT
ON COMPANY
BEGIN
INSERT INTO AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, datetime('now'));
END;
在这里,ID是AUDIT记录ID,EMP_ID是来自COMPANY表的ID,并且在COMPANY表中创建记录时DATE将保留时间戳。
现在在公司表中插入一些记录,它将在AUDIT表中创建审核日志记录。
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Albert', 22, 'Goa', 40000.00);
同时将在AUDIT表中创建一条记录。这仅仅是由于触发器,我们在COMPANY表上的INSERT操作中创建了触发器。让我们看一下AUDIT表。
如何列出触发器
您可以使用sqlite_master语句列出触发器。
SELECT name FROM sqlite_master
WHERE type = 'trigger';
输出:
您可以看到名称触发。
您还可以使用AND子句在特定表上列出触发器。
SELECT name FROM sqlite_master
WHERE type = 'trigger' AND tbl_name = 'COMPANY';
SQLite触发器: INSERT
如果要在插入数据之前创建触发器:
CREATE TRIGGER befor_ins BEFORE INSERT
ON COMPANY
BEGIN
INSERT INTO AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, datetime('now'));
END;
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Sonoo', 28, 'Mumbai', 35000.00);
您可以看到已经创建了触发器,因此无法插入记录。
检查已创建的触发器:
在这里您可以看到两个创建的触发器。