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

标签 mysql logging ado.net

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

最佳答案

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

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

您还可以通过以下方式在 mysql 数据库中存储审核日志:

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

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

关于mysql - 使用 ado.net 记录 mysql 表中的数据更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46551435/

相关文章:

logging - FluentD 日志不可读。它被排除在外,下次会检查

java - 玩!框架日志记录仅适用于系统级别

.NET 代码向存储在 Oracle DB 中的具有 1 或 3 个小数位的数字添加尾随 0

sql-server-2008 - SQL Server 与 ADO.NET 的默认事务隔离级别是什么?

php - 独特的 slug,如果适合 slug-1、slug-2...slug-n

php 计数分组值

php - 警告 : mysqli_query(): Couldn't fetch mysqli

algorithm - 添加 log n log n 操作的复杂性

php - 将选定的mysql数据导出到excel

c# - 使用 OleDb 的 INSERT INTO 语句中的语法错误