13.7.2.3 CHECKSUM TABLE 语句

CHECKSUM TABLE tbl_name [, tbl_name] ... [QUICK | EXTENDED]

CHECKSUM TABLE报告 table 内容的checksum。您可以使用此语句来验证备份,回滚或其他旨在将数据恢复为已知状态的操作前后的内容是否相同。

该语句要求 table 具有SELECT特权。

视图不支持该语句。如果对视图运行CHECKSUM TABLE,则Checksum的值始终为NULL,并返回警告。

对于不存在的 table,CHECKSUM TABLE返回NULL并生成警告。

在校验和操作期间,table 被InnoDBMyISAM的读锁锁定。

Performance Considerations

默认情况下,整个 table 逐行读取,并计算校验和。对于大 table,这可能需要很长时间,因此您只会偶尔执行此操作。这种逐行计算是通过EXTENDED子句,InnoDB和除MyISAM之外的所有其他存储引擎以及未使用CHECKSUM=1子句创建的MyISAMtable 获得的。

对于使用CHECKSUM=1子句创建的MyISAMtable,CHECKSUM TABLE支票 table...快速返回“活动”table 校验和,该校验和可以非常快速地返回。如果 table 不满足所有这些条件,则QUICK方法返回NULLInnoDBtable 不支持QUICK方法。有关CHECKSUM子句的语法,请参见第 13.1.18 节“ CREATE TABLE 语句”

校验和值取决于 table 行格式。如果行格式更改,则校验和也将更改。例如,时间类型(例如TIMEDATETIMETIMESTAMP)的存储格式在 MySQL 5.6 之前的 MySQL 5.6.5 中已更改,因此,如果将 5.5table 升级到 MySQL 5.6,则校验和值可能会更改。

Important

如果两个 table 的校验和不同,那么几乎可以肯定,这些 table 在某种程度上是不同的。但是,由于不能保证CHECKSUM TABLE所使用的哈希函数没有冲突,因此,两个不完全相同的 table 可能会产生相同的校验和。