SQLite After Insert触发器

After Insert触发器 指定在插入数据后如何创建触发器。假设,我们有两个表 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,  
    ENTRY_DATE TEXT NOT NULL  
);   

After Insert创建触发器:

使用以下语法在插入操作后在 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 是审计记录 ID,EMP_ID是来自公司表的 ID,当在公司表中创建记录时,DATE 将保留时间戳。

现在在公司表中插入一些记录,它将在AUDIT表中创建一个审核日志记录。

INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)  
VALUES (1, 'Albert', 22, 'Goa', 40000.00);  

同时将在审计表中创建一个记录。这只是因为触发器,我们已经在公司表上的插入操作上创建了触发器。让我们看看审计表。

SELECT * FROM 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 触发器:BEFORE 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);   

您可以看到触发器已创建,因此无法插入记录。

检查创建的触发器:

在这里,您可以看到两个创建的触发器。

热门文章

优秀文章