使用ado.net记录mysql表中的数据更改

时间:2017-10-03 18:48:34

标签: mysql logging ado.net

是否有任何工作可以使用Ado.NET获取MySQL数据库的最新更改。 即更改哪个表,哪个列,执行操作,旧值和新值。用于单个表更改和多个表更改。想要在我自己的新表中记录更改。

1 个答案:

答案 0 :(得分:0)

有几种方法可以为mysql实现更改跟踪:

  • 触发器:您可以为插入/更新/删除添加数据库触发器,以在审核日志中创建条目。
  • 添加应用程序逻辑以跟踪更改。实施高度依赖于您的数据层;如果您使用ADO.NET DataAdapter,RowUpdating事件适用于此目的。

您还可以使用以下替代方法将审核日志存储在mysql数据库中:

  • 使用一个表作为审计日志,其列为:id,table,operation,new_value(string),old_value(string)。这种方法有几个缺点:这个表会非常快速地增长(因为它保存了所有表中的更改历史记录),它将值保存为字符串,它可以节省新旧对之间重复的过多数据,变更集计算会占用每个插入的一些资源/更新。
  • 对启用了更改跟踪的每个表使用'mirror'表(例如,使用'_log'后缀)。在插入/更新时,您可以在镜像表中执行其他插入命令 - 结果您将在每次保存时记录“快照”,并且通过此快照可以计算更改的内容和时间。插入/更新时的性能开销很小,您无需确定实际更改了哪些值 - 但在“镜像”表中,您将拥有大量冗余数据,因为即使只有一列,也会保存完整行副本改变。
  • 混合解决方案,暂时保存记录'快照',然后在后台处理,以最佳方式存储差异,而不影响应用程序性能。

对于所有情况都没有最佳解决方案,一切都取决于具体的应用程序要求:执行了多少次插入/更新,如何使用审计日志等。