SQLite 触发器(Trigger)


SQLite触发器(Trigger)是一种特殊的程序,可以在数据库中某个事件发生时自动执行。可用于数据库中的插入、更新或删除操作时,执行用户自定义的操作。

使用触发器的情况

常见的情况中,使用触发器的原因是为了强制实施一些规则或者逻辑。

比如对于一张学生表,当某个学生的分数改变时,我们需要在另一张成绩表中自动更新该学生的总分以及平均分。当我们对学生表进行更新时,触发器会自动执行,全部成绩会自动更新,使得数据不会出现不一致的情况。

另外,当一些数据的删除会造成关联表出现难以处理的问题,我们可以使用触发器将对关联表的删除操作一并执行。

触发器的语法

SQLite触发器的语法如下:

CREATE TRIGGER trigger_name [BEFORE/AFTER] trigger_type ON table_name
[FOR EACH ROW] [WHEN condition]
BEGIN
// 触发器操作
END;

其中,各项参数的含义如下:

  • trigger_name:触发器名称,符合标志符的命名规范,不能和现有关键字重复。
  • trigger_type:触发器类型,可以是INSERT,UPDATE或者DELETE。
  • table_name:触发器关联的表名。
  • FOR EACH ROW:触发器作用于每一行数据,即触发器会对每一行进行操作。
  • WHEN condition:触发要执行的操作的条件。
  • BEGIN/END:触发器内的操作用 BEGIN 和 END 来指定范围。

触发器的类型

在设定触发器时,需要选择触发器类型,常见的触发器类型包括:

  • INSERT:在一个INSERT语句执行前/后触发。
  • UPDATE:在一个UPDATE语句执行前/后触发。
  • DELETE:在一个DELETE语句执行前/后触发。
  • INSTEAD OF:类似于视图,用于定义一个视图的行为。

注意事项

在使用触发器的时候,要注意以下几点:

  • 触发器表现为一系列操作,不需要显式地调用。
  • 触发器使用它们的声明表和目标表相同的上下文,因此应该在上下文中引用的任何列或表的名称,都应该显式地加上表名或表别名以区分。
  • 在三种情况下,触发器不会被触发Trigger中含有错误语法或语义;同样含有语法错误和语义错误的SQL语句;确保SQL语句没有重定向到其他表。