📅  最后修改于: 2023-12-03 15:20:18.706000             🧑  作者: Mango
SQLite是一种嵌入式关系数据库管理系统,不像标准的客户/服务器数据库管理系统那样,SQLite不是一个独立的进程,而是以链接库的形式被嵌入到主机程序中,因为其轻量级而被广泛应用于移动设备、嵌入式系统和其他小型项目中。
在SQLite中,触发器是一个可以在特定情况下自动执行的命令或脚本。在数据库中,触发器是用来响应某些特定的事件的。事件可以是对表的INSERT、UPDATE或DELETE等操作。
触发器的语法如下:
CREATE TRIGGER trigger_name
BEFORE/AFTER INSERT OR DELETE OR UPDATE
ON table_name
BEGIN
-- 触发器执行的操作
END;
BEFORE
或AFTER
指明了触发器被触发的时间点;INSERT
、DELETE
或UPDATE
指定了触发器被触发的事件;table_name
指定了触发器所要监视并响应的表;trigger_name
是触发器的名称;BEGIN
和END
之间是触发器要执行的SQL操作。如下代码块所示,在Employee
表中定义一个BEFORE INSERT
触发器,在执行INSERT
操作之前,将自动生成对象的ID
字段:
CREATE TABLE Employee (
ID INTEGER PRIMARY KEY AUTOINCREMENT,
Name TEXT,
Age INT,
Address CHAR(50)
);
CREATE TRIGGER add_employee_id
BEFORE INSERT ON Employee
BEGIN
SELECT COALESCE(MAX(ID)+1, 1) FROM Employee;
END;
INSERT INTO Employee(Name, Age, Address) VALUES ("小明", 25, "上海");
INSERT INTO Employee(Name, Age, Address) VALUES ("小红", 22, "北京");
执行上述INSERT
操作时,会自动为每一个新的员工记录分配ID。
如下代码块所示,在Employee
表中定义一个AFTER INSERT
触发器,在执行INSERT
操作之后,统计新增员工信息:
CREATE TABLE Employee (
ID INTEGER PRIMARY KEY AUTOINCREMENT,
Name TEXT,
Age INT,
Address CHAR(50)
);
CREATE TABLE EmployeeSummary (
SummaryID INTEGER PRIMARY KEY AUTOINCREMENT,
SummaryDate DATE,
TotalEmployees INT
);
CREATE TRIGGER employee_insert_summary
AFTER INSERT ON Employee
BEGIN
INSERT INTO EmployeeSummary (SummaryDate, TotalEmployees)
VALUES (CURRENT_DATE, (SELECT COUNT(*) FROM Employee));
END;
INSERT INTO Employee(Name, Age, Address) VALUES ("小明", 25, "上海");
INSERT INTO Employee(Name, Age, Address) VALUES ("小红", 22, "北京");
SELECT * FROM EmployeeSummary;
执行上述INSERT
操作时,会自动在EmployeeSummary
表中创建一条新的记录。
SQLite触发器可以用来验证数据、在数据插入、修改或删除前执行一些操作等。通过实现触发器,我们可以轻松增强数据库的功能,提高数据库的可靠性。