有几种方法可以为mysql实现更改跟踪:
- 触发器:您可以为插入/更新/删除添加数据库触发器,以在审核日志中创建条目。
- 添加应用程序逻辑以跟踪更改。实施高度依赖于您的数据层;如果您使用ADO.NET DataAdapter,RowUpdating事件适用于此目的。
您还可以使用以下替代方法将审核日志存储在mysql数据库中:
- 使用一个表作为审计日志,其列为:id,table,operation,new_value(string),old_value(string)。这种方法有几个缺点:这个表会非常快速地增长(因为它保存了所有表中的更改历史记录),它将值保存为字符串,它可以节省新旧对之间重复的过多数据,变更集计算会占用每个插入的一些资源/更新。
- 对启用了更改跟踪的每个表使用'mirror'表(例如,使用'_log'后缀)。在插入/更新时,您可以在镜像表中执行其他插入命令 - 结果您将在每次保存时记录“快照”,并且通过此快照可以计算更改的内容和时间。插入/更新时的性能开销很小,您无需确定实际更改了哪些值 - 但在“镜像”表中,您将拥有大量冗余数据,因为即使只有一列,也会保存完整行副本改变。
- 混合解决方案,暂时保存记录'快照',然后在后台处理,以最佳方式存储差异,而不影响应用程序性能。
对于所有情况都没有最佳解决方案,一切都取决于具体的应用程序要求:执行了多少次插入/更新,如何使用审计日志等。