我正在尝试为MySQL中的各个表编写一个小型审计系统。
我很幸运使用基本的INSERT
/ UPDATE
/ DELETE
命令,但现在我对审核感兴趣的表使用了INSERT ... ON DUPLICATE KEY UPDATE
。
通过使用触发器ON BEFORE INSERT
我可以告诉这个事件正在发生,但是我只能获得我感兴趣的一半数据。NEW.values
随时可用,但我不知道如何得到之前的OLD.values
。我想我可以使用现有表中的NEW.ID
进行查询,但我不确定性能和可靠性。
我需要OLD.values
,因为我正在为每个更改事件存储旧值和新值,因为我在某处读取了折叠数据等的好主意...
在MySQL 5.0(或更新的GA版本)中是否有办法可靠地检索这些值,就像我在UPDATE
触发器中一样?
编辑:另一个皱纹:
NEW.values
看起来与更新后的数据不匹配。它们匹配INSERT
语句而不是实际进入记录的ON DUPLICATE KEY UPDATE
数据。
答案 0 :(得分:0)
看起来触发事件ON AFTER UPDATE
也捕获ON DUPLICATE KEY UPDATE
更改。从这里,我能够获得OLD / NEW值并执行我需要执行的日志记录。