更新mysql中的特定列后触发一个触发器

sen*_*ior 33 mysql

在MySQL中,我想在更新特定列之后触发一个触发器,在Oracle和DB2中,我知道该怎么做:

CREATE  TRIGGER  myTrigger
AFTER UPDATE of myColumn1,myColumn2 ... ON myTable
FOR EACH ROW
BEGIN
....
END
Run Code Online (Sandbox Code Playgroud)

如何用MySQL做到这一点?

Nit*_*sal 45

您无法在SQL中触发特定列更新.它应用于一行.

你可以把你的条件作为你的触发器,如下所示:

DELIMITER //
CREATE TRIGGER myTrigger AFTER UPDATE ON myTable
FOR EACH ROW
BEGIN
IF NEW.column1 <=> OLD.column1 THEN
--type your statements here
END IF;
END;//
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

  • 值得一提的是`<>`不适用于`NULL`s.您应该使用null-safe相等运算符`<=>`或者另外检查`NULL`s. (9认同)
  • 根据MySQL文档,没有`!&lt;=&gt;`运算符,因此您可以使用`!(NEW.columnName &lt;=&gt; OLD.columnName)`来确定新值是否与旧值不同。 (2认同)

sen*_*ior 6

作为解决方案,我确实喜欢这样:

CREATE  TRIGGER  myTrigger
AFTER UPDATE  ON myTable
FOR EACH ROW
BEGIN
IF NEW.myColumn1 <> OLD.myColumn1 || NEW.myColumn2 <> OLD.myColumn2
then

.....

END IF
END
Run Code Online (Sandbox Code Playgroud)


jue*_*n d 5

您不能仅指定触发特定的列更改.但是你可以做桌子上的记录改变

delimiter |
CREATE  TRIGGER  myTrigger AFTER UPDATE ON myTable
FOR EACH ROW
BEGIN
   ...
END
|
delimiter ;
Run Code Online (Sandbox Code Playgroud)

在触发器中,您可以像这样引用列的新旧内容

if NEW.column1 <> OLD.column1 ...
Run Code Online (Sandbox Code Playgroud)