执行UPDATE语句后出现两次「x行受影响」提示是什么原因?
UPDATE语句输出两次受影响行数的原因
这是MySQL执行UPDATE操作的常见输出,对应两种不同的计数逻辑,和你预期的159行修改目标并不冲突:
- 第一种是最常见的场景:你看到的两组数分别是匹配行数和实际修改行数
绝大多数MySQL客户端执行完UPDATE后都会默认输出如下格式的统计:Rows matched: 159 Changed: 159 Warnings: 0
其中Rows matched统计的是完全符合你的UPDATE语句WHERE过滤条件的总行数,Changed统计的是实际发生了数据修改的行数。如果符合WHERE条件的行的对应字段值已经和你SET的目标值完全相同,就会出现匹配行数大于修改行数的情况。你这里两个值都是159,说明所有匹配到的行都完成了修改,完全符合你的预期,并不是语句重复执行了两次。 - 第二种场景:目标表配置了触发式逻辑
如果你看到的是两个独立的X rows affected提示,没有上述的matched/changed标识,说明你修改的表上配置了UPDATE相关的触发器,UPDATE修改159行的操作触发了触发器内的额外写操作,第二次返回的数值是触发器内部执行写操作的受影响行数。
你可以执行SHOW TRIGGERS LIKE '对应表名';命令查询该表的触发器配置验证这个情况。
内容的提问来源于stack exchange,提问作者Hopper
相关产品推荐
相关产品推荐

