CHECKSUM TABLE tbl_name [, tbl_name] ... [QUICK | EXTENDED]
CHECKSUM TABLE
报告表的 校验和。可以使用此语句验证备份、回滚或其他旨在将数据恢复到已知状态的操作之前和之后的内容是否相同。
此语句需要对该表具有 SELECT
权限。
此语句不支持视图。如果对视图运行 CHECKSUM TABLE
,则 Checksum
值始终为 NULL
,并返回警告。
对于不存在的表,CHECKSUM TABLE
返回 NULL
并生成警告。
在校验和操作期间,表将使用读锁锁定,适用于 InnoDB
和 MyISAM
。
默认情况下,整个表会逐行读取,并计算校验和。对于大型表,这可能需要很长时间,因此您只会偶尔执行此操作。这种逐行计算是您在使用 EXTENDED
子句、InnoDB
和除 MyISAM
之外的所有其他存储引擎,以及没有使用 CHECKSUM=1
子句创建的 MyISAM
表时获得的结果。
对于使用 CHECKSUM=1
子句创建的 MyISAM
表,CHECKSUM TABLE
或 CHECKSUM TABLE ... QUICK
会返回可以非常快速返回的 “实时” 表校验和。如果表不满足所有这些条件,则 QUICK
方法将返回 NULL
。 QUICK
方法不支持 InnoDB
表。有关 CHECKSUM
子句语法的详细信息,请参见 第 15.1.20 节,“CREATE TABLE 语句”。
校验和值取决于表行格式。如果行格式发生更改,则校验和也会更改。例如,时间类型(如 TIME
、DATETIME
和 TIMESTAMP
)的存储格式在 MySQL 5.6.5 之前的 MySQL 5.6 中发生了更改,因此,如果将 5.5 表升级到 MySQL 5.6,则校验和值可能会发生更改。
如果两个表的校验和不同,则几乎可以肯定这两个表在某种程度上是不同的。但是,由于 CHECKSUM TABLE
使用的哈希函数不能保证无冲突,因此两个不完全相同的表可能会生成相同的校验和,这种可能性很小。