1.1 什么是触发器
触发器(Trigger)是一种特殊的存储过程,它可以在数据库管理系统中监测到某些特定的事件,如 INSERT、UPDATE 或 DELETE 操作,并在这些事件发生时自动执行相应的操作。
1.2 触发器的作用和优势
触发器可以帮助开发者实现很多复杂的业务逻辑。例如,在数据表中插入新记录时,可以自动计算某些统计值或者更新关联的表;或者在删除某条记录时,可以同时删除相关的数据。
与存储过程相比,触发器的优点在于它具有更高的灵活性和精确度,因为它可以与数据库引擎紧密集成并监视事务的所有变化。
🌟触发器基础知识
2.1 触发器的工作原理
当定义一个触发器时,必须指定触发器的事件类型(INSERT、UPDATE 或 DELETE)、触发器的类型(行级触发器或语句级触发器)、触发器执行的条件和触发器的代码逻辑等信息。
当数据库引擎执行一条对数据表的 INSERT、UPDATE 或 DELETE 操作时,如果该操作符合触发器的事件和条件要求,则触发器的代码逻辑会自动执行。
2.2 触发器的类型
2.2.1 行级触发器
行级触发器(Row-Level Trigger)是指针对每一行数据进行触发,即当 INSERT、UPDATE 或 DELETE 操作影响到某个数据表的某一行时,就会触发该触发器。
2.2.2 语句级触发器
语句级触发器(Statement-Level Trigger)是指针对整个 SQL 语句进行触发,即当 INSERT、UPDATE 或 DELETE 操作影响到某个数据表时,就会触发该触发器。
2.3 触发器的创建和删除
在 PostgreSQL 中,可以使用 CREATE TRIGGER 命令来创建新的触发器,例如:
CREATE TRIGGER my_trigger AFTER INSERT ON my_table FOR EACH ROW WHEN (NEW.col1 > 0) EXECUTE FUNCTION my_function();
上述命令创建了一个名为 my_trigger 的行级触发器,在 my_table 表上进行 INSERT 操作时触发。当新插入的记录中 col1 大于 0 时,将执行名为 my_function 的函数。
可以使用 DROP TRIGGER 命令来删除触发器,例如:
DROP TRIGGER my_trigger ON my_table;
上述命令删除了名为 my_trigger 的触发器。
🌟触发器语法和语义
3.1 触发器的语法结构
触发器的语法结构包括触发器名称、触发器事件类型、触发器类型、触发器条件和触发器代码等部分。例如:
CREATE TRIGGER my_trigger AFTER INSERT ON my_table FOR EACH ROW WHEN (NEW.col1 > 0) EXECUTE FUNCTION my_function();
上述命令定义了一个名为 my_trigger 的行级触发器,它在 my_table 表上进行 INSERT 操作时触发。当新插入的记录中 col1 大于 0 时,将执行名为 my_function 的函数。
3.2 触发器的执行时机
触发器可以在 INSERT、UPDATE 或 DELETE 操作之前或之后执行,具体取决于触发器的类型和事件。例如:
- BEFORE 触发器:在 INSERT、UPDATE 或 DELETE 操作之前执行。
- AFTER 触发器:在 INSERT、UPDATE 或 DELETE 操作之后执行。
- 另外,对于行级触发器来说,在每一行数据被操作时都会触发一次。而对于语句级触发器来说,只有在整个 SQL 语句执行完毕后才会触发一次。