我有一个PHP脚本来更新MySQL表中的一行。该表具有触发器设置,可在更新时将值存储在第二个表中。
我发现了一个奇怪的问题,对于特定的行,更新语句不会更改行,但会触发触发器并插入第二个表。我在更新后触发"" - 所以我不知道如何在基表中更新数据,但是在更新后成功触发了#34;"并插入第二个表。
关于什么情况可能导致此问题或在何处进行故障排除的任何想法?
编辑: 为了进一步说明 - UPDATE语句应该改变基表数据,但不是。但是,触发器表目标反映了更改,就像更新已发生一样。触发器表用作日志记录表 - 对于基表的任何更改,数据的快照将通过触发器插入到日志记录表中。我在日志表中看到了更改记录,但基表中没有实际更改。
答案 0 :(得分:1)
对于特定行,update语句不会更改行,但会触发触发器并插入第二个表。
这是正常的。 AFTER UPDATE
触发器仍会触发,即使UPDATE
未修改该行,因为您尝试SET
的数据已存在。
如果你想知道某件事是否发生了变化,你必须对其进行测试。
IF NOT (NEW.c1 <=> OLD.c1) THEN
/* do stuff */
END IF;
使用NOT ( ... <=> ... )
是一个带有反转的无效安全真实性测试。当NOT (NULL <=> 1)
回避TRUE
时,NULL != 1
评估为NULL
。