获取触发器仅在审计表中插入更改的列值

时间:2009-04-11 14:30:01

标签: mysql triggers audit-tables

我正在使用触发器来存储审计表中的更改,我只想存储已更改的列中的值。

BEGIN
IF NEW.history_of_repair_trigger_fired = 1 THEN
INSERT INTO history_of_repair SET
edit_date_time=NEW.last_edited_date_time,
edited_by=NEW.edited_by,
repair_id=NEW.repair_id,
tenant_name=NEW.tenant_name,
property_id=NEW.property_id,
priority=NEW.priority,
comments=NEW.comments,
signed_off=NEW.signed_off;
END IF;
END

目前这也是将未更改的值存储在审计表中,这是不可取的。

仅将更改的列存储在审计表中的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

根据您的评论,我不会担心只存储更改的值 - 磁盘空间很便宜。存储实际值具有以下优点:如果您需要匆忙,将记录恢复到某个时间点会非常简单。如果需要生成人类可读的审计记录,则将其存储在varchar / nvarchar中,并通过将更改累积到字符串中来构造触发器中的消息。除了实际值之外,我可能会存储它。请注意,您还可以提供一个表值函数,它可以为您动态构造此人类可读列,而不是存储它。