📜  SQLite-触发器(1)

📅  最后修改于: 2023-12-03 15:20:18.706000             🧑  作者: Mango

SQLite触发器

SQLite是一种嵌入式关系数据库管理系统,不像标准的客户/服务器数据库管理系统那样,SQLite不是一个独立的进程,而是以链接库的形式被嵌入到主机程序中,因为其轻量级而被广泛应用于移动设备、嵌入式系统和其他小型项目中。

在SQLite中,触发器是一个可以在特定情况下自动执行的命令或脚本。在数据库中,触发器是用来响应某些特定的事件的。事件可以是对表的INSERT、UPDATE或DELETE等操作。

触发器的语法

触发器的语法如下:

CREATE TRIGGER trigger_name
BEFORE/AFTER INSERT OR DELETE OR UPDATE
ON table_name
BEGIN
-- 触发器执行的操作
END;
  • BEFOREAFTER指明了触发器被触发的时间点;
  • INSERTDELETEUPDATE指定了触发器被触发的事件;
  • table_name指定了触发器所要监视并响应的表;
  • trigger_name是触发器的名称;
  • BEGINEND之间是触发器要执行的SQL操作。
触发器实例
BEFORE INSERT触发器

如下代码块所示,在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。

AFTER INSERT触发器

如下代码块所示,在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触发器可以用来验证数据、在数据插入、修改或删除前执行一些操作等。通过实现触发器,我们可以轻松增强数据库的功能,提高数据库的可靠性。