MySQL触发器'update on column'语法

16

我们可以在MySQL上使用触发器来更新同一行中的另一个列吗?

create trigger my_trigger
BEFORE UPDATE OF col1, col2 ON TABLE_NAME
for each row
set NEW.col3 =  NEW.col3 +1;

我尝试使用UPDATE OF col1, col2 上述代码。它在MySQL中不起作用。正确的语法是什么,有人可以给我一些示例吗。

1个回答

21

您无法指定触发器仅在特定列的更新时运行(UPDATE会影响整个记录),但您可以在触发器内测试已更新哪些列:

DELIMITER ;;

CREATE TRIGGER my_trigger BEFORE UPDATE ON TABLE_NAME FOR EACH ROW
IF NOT (NEW.col1 <=> OLD.col1 AND NEW.col2 <=> OLD.col2) THEN
  SET NEW.col3 = NEW.col3 + 1;
END IF;;

DELIMITER ;

谢谢,但这只适用于MySQL吗? - cldy1020
@ms1020:你对哪些其他关系型数据库管理系统感兴趣? - eggyal
4
目前我只能使用MySQL。只想知道其他关系型数据库管理系统是否也有这个限制。我知道Oracle支持在列级别进行更新。 - cldy1020

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接