在更新 MySQL 中的特定列后触发触发器

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/19152974/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-31 19:02:18  来源:igfitidea点击:

Fire a trigger after the update of specific columns in MySQL

mysqlsqltriggers

提问by senior

In MySQL, I want to fire a trigger after the updateof specific columns.

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

I know how to do it in Oracle and DB2:

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

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

How to do that with MySQL?

如何用 MySQL 做到这一点?

回答by Nitu Bansal

You can't trigger on a particular column update in SQL. It is applied on a row.

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

You can put your condition for columm in your trigger with an IFstatement, as below:

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

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 ;

回答by senior

As a solution, I did like that:

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

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

.....

END IF
END

回答by juergen d

You can't specify only to fire on specific column changes. But for a record change on a table you can do

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

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

In your trigger you can refer to old and new content of a column like this

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

if NEW.column1 <> OLD.column1 ...