触发器:解密PostgreSQL数据库的强大利器

337 阅读3分钟

请添加图片描述

完整版点击该链接chenshuyu.blog.csdn.net/article/det…

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3

image.png

image.png

🌟概述

完整版点击该链接chenshuyu.blog.csdn.net/article/det…

1.1 什么是触发器

触发器(Trigger)是一种特殊的存储过程,它可以在数据库管理系统中监测到某些特定的事件,如 INSERT、UPDATE 或 DELETE 操作,并在这些事件发生时自动执行相应的操作。

1.2 触发器的作用和优势

触发器可以帮助开发者实现很多复杂的业务逻辑。例如,在数据表中插入新记录时,可以自动计算某些统计值或者更新关联的表;或者在删除某条记录时,可以同时删除相关的数据。

与存储过程相比,触发器的优点在于它具有更高的灵活性和精确度,因为它可以与数据库引擎紧密集成并监视事务的所有变化。

🌟触发器基础知识

2.1 触发器的工作原理

当定义一个触发器时,必须指定触发器的事件类型(INSERT、UPDATE 或 DELETE)、触发器的类型(行级触发器或语句级触发器)、触发器执行的条件和触发器的代码逻辑等信息。

当数据库引擎执行一条对数据表的 INSERT、UPDATE 或 DELETE 操作时,如果该操作符合触发器的事件和条件要求,则触发器的代码逻辑会自动执行。

2.2 触发器的类型

完整版点击该链接chenshuyu.blog.csdn.net/article/det…

2.2.1 行级触发器

行级触发器(Row-Level Trigger)是指针对每一行数据进行触发,即当 INSERT、UPDATE 或 DELETE 操作影响到某个数据表的某一行时,就会触发该触发器。

2.2.2 语句级触发器

语句级触发器(Statement-Level Trigger)是指针对整个 SQL 语句进行触发,即当 INSERT、UPDATE 或 DELETE 操作影响到某个数据表时,就会触发该触发器。

2.3 触发器的创建和删除

完整版点击该链接chenshuyu.blog.csdn.net/article/det…

在 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 的触发器。

完整版点击该链接chenshuyu.blog.csdn.net/article/det…

🌟触发器语法和语义

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 语句执行完毕后才会触发一次。

完整版点击该链接chenshuyu.blog.csdn.net/article/det…

在这里插入图片描述