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

AFTER UPDATE触发器中new.field与old.field的含义及字段引用疑问

UPDATE触发器中old.a与new.a的使用区别

嘿,这个问题问得很到位!刚好我对触发器里的old和new对象熟得很,给你掰扯清楚:

在AFTER UPDATE触发器场景下,对于没有被本次UPDATE操作修改的字段(比如你例子里的a、b),old.a和new.a的数值是完全一致的,没有任何区别。

原因很简单:当你执行UPDATE只修改c字段时,数据库会把更新前的完整记录快照存在old对象里;而new对象则是更新后的完整记录——注意哦,这里的“完整”包括所有字段,没被修改的a、b会直接沿用原来的值,不会有变化。

举个直观的例子:
假设原记录是a=10, b=20, c=30,执行UPDATE your_table SET c=35 WHERE ...之后:

  • old.a = 10,new.a = 10
  • old.b = 20,new.b = 20
  • old.c = 30,new.c = 35

所以回到你的问题:引用字段a时,用old.a或者new.a都没问题,拿到的是同一个值。只有被修改的字段(比如c),old和new才会有差异。

当然,从编码习惯上来说,如果你想强调这个字段是“原始未修改的”,用old.a会更表意;但功能上两者完全等价,怎么用都不会出错。

内容的提问来源于stack exchange,提问作者Pete Watters Chatsworth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:15:36