postgresql 触发器中的 FOR EACH ROW和FOR EACH STATEMENT的区别

news/2024/7/9 21:02:39 标签: postgresql, 数据库

在 PostgreSQL 中,触发器(Triggers)是用于在数据库中特定的操作(如插入、更新、删除)发生时自动执行的特殊函数。触发器可以在行级别(FOR EACH ROW)或语句级别(FOR EACH STATEMENT)上触发,这取决于触发器的定义。

以下是 FOR EACH ROW 和 FOR EACH STATEMENT 触发器的区别:

  1. FOR EACH ROW 触发器:
  • FOR EACH ROW 触发器是在每行受影响时触发的。也就是说,当执行的操作影响到表中的每一行时,触发器会被执行。
  • FOR EACH ROW 触发器可以访问并操作正在被修改的行的数据,因为它是在每行之间触发的。
  • FOR EACH ROW 触发器通常用于需要对每个受影响的行执行特定操作的情况,例如在更新某一行时更新其他相关行。
  1. FOR EACH STATEMENT 触发器:
  • FOR EACH STATEMENT 触发器是在执行语句完成后触发的,而不是在每行之间触发。
  • FOR EACH STATEMENT 触发器不能直接访问或操作正在被修改的行的数据,因为它是在语句级别上触发的。
  • FOR EACH STATEMENT 触发器通常用于需要对整个语句的结果执行操作的情况,例如在插入大批量数据时进行一些汇总计算或日志记录。

在编写触发器时,需要根据具体的需求和操作确定是使用 FOR EACH ROW 还是 FOR EACH STATEMENT 触发器。如果需要对每行进行个别操作或需要访问被修改的行数据,应选择 FOR EACH ROW 触发器。如果只需要对整个语句的结果进行操作,而不需要访问具体的行数据,应选择 FOR EACH STATEMENT 触发器。

需要注意的是,FOR EACH ROW 触发器会在每行之间触发,因此对于大批量操作或频繁的行级操作,可能会有额外的性能开销。因此,在选择触发器类型时,还应考虑系统的性能和资源消耗。


http://www.niftyadmin.cn/n/1010402.html

相关文章

shardingsphere-jdbc sqlserver读写分离踩坑记录

1&#xff0c;shardingsphere-jdbc-core-spring-boot-starter pom maven依赖 <dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId><version>5.1.1</ver…

Websocket 之flask_socketio和Python socketio

Flask Websocket 1、falsk_socket与前端&#xff08;1&#xff09;测试版&#xff08;2&#xff09;完整版 2、client与serve&#xff08;socket&#xff09;&#xff08;1&#xff09;python的socketio实现&#xff08;2&#xff09;flask和socketio客户端实现 3、Python环境…

windows 搭建Gerrit

Windows 安装Gerrit Java 11Gerrit https://gerrit-releases.storage.googleapis.com/index.htmlApache https://link.zhihu.com/?targethttps%3A//www.apachehaus.com/cgi-bin/download.plx Apache 修改\conf\httpd.conf Listen 8081 ServerName localhost:8081保证下面这…

《Reinforcement Learning: An Introduction》第7章笔记

Chapter 7 n-step Bootstrapping 本章的n-step TD方法是前两章的Monte Carlo 方法和one-step TD方法的推广。它使自举法在多个时间步内进行&#xff0c;解决了前两章中的更新时间步不灵活的问题。 7.1 n-step TD Prediction 在用策略 π \pi π下生成的采样回合序列来估计 v…

多模态之论文笔记BEiT, BEiT V2, BEiT V3

文章目录 OverviewBEiT1.0. Summary1.1. BEiT VS BERT2.1. Two Views: visual tokens2.1. Two Views: image patches3. Results BEiT V21.0. Summary1.1. Motivation2.1. Methods -- VQ-KD2.2. Methods -- patch aggregation3.1. Results -- image classification & semant…

HIVE 复制行n次直到某一列等于200

例如需要复制tmp_1表n次&#xff0c;每复制一次&#xff0c;gday1&#xff0c;直到gday200, 借助 lateral view posexplode&#xff0c;首先用space复制多个空格字符串&#xff0c;复制次数200-gday 然后split将字符串分割成数组&#xff0c;此时该数组大小为200-gday 然后l…

springboot监听Redis 缓存过期(Key 失效)事件

1、Redis配置修改 事件通过 Redis 的订阅与发布功能&#xff08;pub/sub&#xff09;来进行分发, 故需要开启 redis 的事件监听与发布 修改 redis.conf 文件&#xff08;Windows上是redis.windows.conf和redis.windows-service.conf&#xff09; notify-keyspace-events Ex2、…

Redis通讯协议Resp

什么是redis通讯协议 RESP是REdis Serialization Protocol的简称,也就是专门为redis设计的一套序列化协议. 这个协议其实在redis的1.2版本时就已经出现了,但是到了redis2.0才最终成为redis通讯协议的标准。 redis通讯协议(RESP )的格式 Redis的通信协议首先是以行来划分&…