是否有任何可能性使用“更新后”触发器,只有在情况下的数据已经真正改变。 我知道“新的和旧的”,但是当我使用它们的时候,我只能比较栏目。 例如“ 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 |
+------+------+
重点是,有一个更新,但 什么都没变。 但是触发器还是启动了,恕我直言,应该有办法不让它启动。
我知道我本可以
IF NOW.b < > OLD.b
这个例子。
但是,想象一个具有更改列的大型表。 必须比较每一列,如果数据库发生变化,则必须调整触发器。 而且,比较硬编码行中的每一列“感觉”不太好:)
加法
你可以在线上看到
匹配的行: 1更改: 0警告: 0
MySQL 知道这条线没有改变,但是它并没有和触发器分享这些信息。 像“ AFTER REAL UPDATE”之类的触发器会很酷。