在更新 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
Fire a trigger after the update of specific columns in MySQL
提问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 IF
statement, 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 ...