首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >仅当行已更改时,MySQL触发器after update

仅当行已更改时,MySQL触发器after update
EN

Stack Overflow用户
提问于 2011-06-10 00:43:24
回答 8查看 190.2K关注 0票数 70

只有在数据确实被更改的情况下,才有可能使用"after update“触发器。我知道“新旧”。但在使用它们时,我只能比较列。例如"NEW.count <> OLD.count“。

但是我想要这样的东西:如果"NEW <> OLD“就运行触发器

举个例子:

代码语言:javascript
复制
create table foo (a INT, b INT);
create table bar (a INT, b INT);

INSERT INTO foo VALUES(1,1);
INSERT INTO foo VALUES(2,2);
INSERT INTO foo VALUES(3,3);

CREATE TRIGGER ins_sum
    AFTER UPDATE ON foo
    FOR EACH ROW
    INSERT INTO bar VALUES(NEW.a, NEW.b);

UPDATE foo SET b = 3 WHERE a=3;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0


select * from bar;
+------+------+
| a    | b    |
+------+------+
|    3 |    3 |
+------+------+

重点是,有一个更新,但什么都没有改变。但是触发器还是启动了。我想应该有一种方法不是这样。

我知道我本可以利用

如果为NOW.b,则为

。b <> OLD.b

在这个例子中。

但是想像一下,有一个大的表,其中的列在变化。您必须比较每一列,如果数据库发生更改,您必须调整触发器。硬编码的行的每一列都进行比较并不“感觉”好:)

添加

正如你在线路上看到的

匹配的

行数:1已更改:0警告:0

MySQL知道这条线没有改变。但它并不与触发器共享这些知识。像“真正更新后”这样的触发器或类似这样的东西将会很酷。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6296313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档