MySQL仅在行已更改时才更新
是否有可能仅在数据被真正改变的情况下使用“更新后”触发器。我知道“新旧”。但是在使用它们时我只能比较列。例如“NEW.count <> OLD.count”。
但我想要的是:如果“NEW <> OLD”则运行触发器
一个例子:
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 <> OLD.b
对于这个例子。
想象一下有一个变化列的大桌子。您必须比较每一列,如果数据库发生更改,则必须调整触发器。并且比较硬编码的行的每一列并不“感觉”好:)
加成
正如你所看到的那样
匹配的行数:1已更改:0警告:0
MySQL知道该行没有改变。但它不会与触发器分享这些知识。像“AFTER REAL UPDATE”之类的触发器或类似的东西会很酷。
慕莱坞森
芜湖不芜
相关分类