40

在 MySQL 中,我想在更新特定列后触发触发器。

我知道如何在 Oracle 和 DB2 中做到这一点:

CREATE  TRIGGER  myTrigger
AFTER UPDATE of myColumn1,myColumn2 ... ON myTable
FOR EACH ROW
BEGIN
....
END

如何用 MySQL 做到这一点?

4

3 回答 3

61

您不能触发 SQL 中的特定列更新。它应用于一行。

您可以使用语句将列的条件放入触发器中IF,如下所示:

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 ;
于 2013-10-03T07:24:59.540 回答
7

您不能指定仅在特定列更改时触发。但是对于表上的记录更改,您可以这样做

delimiter |
CREATE  TRIGGER  myTrigger AFTER UPDATE ON myTable
FOR EACH ROW
BEGIN
   ...
END
|
delimiter ;

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

if NEW.column1 <> OLD.column1 ...
于 2013-10-03T07:12:39.030 回答
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
于 2013-10-03T07:26:14.717 回答