只有在数据确实被更改的情况下,才有可能使用"after update“触发器。我知道“新旧”。但在使用它们时,我只能比较列。例如"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,则为
。b <> OLD.b
在这个例子中。
但是想像一下,有一个大的表,其中的列在变化。您必须比较每一列,如果数据库发生更改,您必须调整触发器。硬编码的行的每一列都进行比较并不“感觉”好:)
添加
正如你在线路上看到的
匹配的
行数:1已更改:0警告:0
MySQL知道这条线没有改变。但它并不与触发器共享这些知识。像“真正更新后”这样的触发器或类似这样的东西将会很酷。
https://stackoverflow.com/questions/6296313
复制相似问题