SQLite 触发器:AFTER INSERT/ BEFORE INSERT

SQLite 触发器:AFTER INSERT/ BEFORE 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
);

在COMPANY表中插入新记录时,将记录信息插入名为AUDIT的新表中:

AUDIT表:

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是AUDIT记录的ID,EMP_ID是将来从COMPANY表中获取的ID,DATE将在记录被创建在COMPANY表中时保留时间戳。

SQLite 触发器:AFTER INSERT/ BEFORE INSERT

现在在公司表中插入一些记录,将会在审计表中创建一条审计日志记录。

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

SQLite 触发器:AFTER INSERT/ BEFORE INSERT

同时,将在审核表中创建一条记录。这仅仅是由于我们在公司表上创建了INSERT操作的触发器。让我们来看看审核表。

SELECT * FROM AUDIT; 

SQLite 触发器:AFTER INSERT/ BEFORE INSERT

如何列出触发器

您可以使用sqlite_master语句列出触发器。

SELECT name FROM sqlite_master
WHERE type = 'trigger'; 

输出:

SQLite 触发器:AFTER INSERT/ BEFORE INSERT

你可以看到触发器的名称。

你也可以使用AND子句将特定表上的触发器列出。

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

SQLite 触发器:AFTER INSERT/ BEFORE INSERT

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;

SQLite 触发器:AFTER INSERT/ BEFORE INSERT

INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Sonoo', 28, 'Mumbai', 35000.00); 

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

SQLite 触发器:AFTER INSERT/ BEFORE INSERT

检查已创建的触发器:

SQLite 触发器:AFTER INSERT/ BEFORE INSERT

在这里,你可以看到所创建的触发器。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程