同一表的多BEFORE UPDATE触发器执行时,OLD与NEW值是否变化?
BEFORE UPDATE触发器的OLD/NEW值传递逻辑
当同一张数据表上存在两个执行顺序固定(A先、B后)的BEFORE UPDATE触发器时,OLD和NEW值的引用规则如下:
- 两个触发器的OLD值完全相同,都是UPDATE操作执行前的原始数据,不会被任何触发器的修改影响。
- 触发器A中修改后的NEW值,会成为触发器B的NEW值——也就是B所引用的NEW是经过A修改后的结果,而非初始UPDATE语句指定的原始NEW值。
举个直观的例子:假设表中有score字段,原始值为80,执行UPDATE table SET score = 90语句:
- 触发器A执行时,
OLD.score = 80,NEW.score = 90;若A将NEW.score修改为85, - 触发器B执行时,
OLD.score仍为80,但NEW.score已经是85。
内容的提问来源于stack exchange,提问作者Nolan
相关产品推荐
相关产品推荐

