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= 10old.b= 20,new.b= 20old.c= 30,new.c= 35
所以回到你的问题:引用字段a时,用old.a或者new.a都没问题,拿到的是同一个值。只有被修改的字段(比如c),old和new才会有差异。
当然,从编码习惯上来说,如果你想强调这个字段是“原始未修改的”,用old.a会更表意;但功能上两者完全等价,怎么用都不会出错。
内容的提问来源于stack exchange,提问作者Pete Watters Chatsworth
相关产品推荐
相关产品推荐

