You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

事务场景下FOR EACH STATEMENT触发器执行规则相关问询

语句级触发器执行次数答疑

核心结论

FOR EACH STATEMENT(语句级触发器)的执行次数仅和你执行的符合触发条件的SQL语句数量相关,和事务数量、单条SQL影响的行数都没有关联,针对你提到的同事务下1000条插入的场景,分两种情况:

  • 如果你是单独执行1000条单条INSERT语句,触发器会执行1000次
  • 如果你是用1条批量INSERT语句一次性插入1000行数据,触发器仅执行1次

概念说明

语句级触发器定义中的“语句”,指的是你提交给数据库执行的单条DML(INSERT/UPDATE/DELETE/TRUNCATE)指令:

  • 只要单条指令符合触发时机和触发条件,不管这条指令影响多少行数据,都只会触发一次语句级触发器
  • 与之对应的行级触发器FOR EACH ROW,才会按语句影响的行数触发,比如单条批量插入1000行的场景下,行级触发器会触发1000次
  • 事务只是用来保证操作的原子性,不会改变触发器的计数逻辑,不管你是否将插入操作包在同一个事务中,只要执行的SQL语句数量不变,语句级触发器的执行次数就不会变

场景示例

场景1:同事务下1000条单条插入

BEGIN;
INSERT INTO table_name(col) VALUES ('val1'); -- 触发1次
INSERT INTO table_name(col) VALUES ('val2'); -- 触发1次
-- 省略剩余998条单条INSERT语句
INSERT INTO table_name(col) VALUES ('val1000'); -- 触发1次
COMMIT;

以上场景触发器总执行次数为1000次。

场景2:同事务下1次批量插入1000行

BEGIN;
INSERT INTO table_name(col) VALUES ('val1'), ('val2'), ..., ('val1000'); -- 仅触发1次
COMMIT;

以上场景触发器总执行次数为1次。

内容的提问来源于stack exchange,提问作者Banda89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 18:39:02