如何使用C#执行MySQL表的校验和?

时间:2013-04-12 21:39:32

标签: c# mysql .net checksum

我想检查我的MySQL表是否已更改,我认为对它进行校验和可能是一个很好的解决方案。我正在使用官方的MySQL .NET连接器。

通常我使用MySqlDataReader从我的select查询中获取数据,但是我不确定它在校验和查询中是如何工作的。这是我到目前为止所做的。

string query = "checksum table `" + name + "`";

string result = "";

if (isConnected())
{
   MySqlCommand cmd = new MySqlCommand(query, connection);
   cmd.ExecuteNonQuery();
}

我找到了校验和查询here

感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

您有正确的查询,但是您应该了解可能的性能影响。

如果表是MyISAM(如果您使用的是更新版本的MySQL,它可能不应该是这样)并且您为表定义了CHECKSUM = 1选项,那么您可以执行QUICK校验和,这应该发生快。

如果您有INNODB表,则必须执行全表扫描才能执行此命令。从性能相当大的表格的性能角度来看,这可能是不可行的。

我建议在这里查看MySQL文档以供选择。

http://dev.mysql.com/doc/refman/5.5/en/checksum-table.html

另一个可能简单的选择是在表上放置一个触发器,每次插入/更新/删除记录时,该触发器都会更新另一个表中的时间戳。然后,您可以将此时间戳与给定日期进行比较,以了解是否在该时间段内进行了更改。

同样,如果您的表还没有“On UPDATE CURRENT_TIMESTAMP”时间戳字段,您只需添加一个,在其上放置一个索引并从该字段中查询最大值。这显然会增加一些数据大小和索引大小开销,这可能是不可取的。这显然也不会捕获删除(尽管您可以通过计算主索引字段来轻松检查)