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 节,“创建表语句”。
校验和值取决于表的行格式。如果行格式发生更改,校验和也会更改。例如,在 MySQL 5.6.5 之前的 MySQL 5.6 中,时间类型(例如TIME
、DATETIME
和TIMESTAMP
)的存储格式发生了更改,因此,如果将 5.5 表升级到 MySQL 5.6,则校验和值可能会发生更改。
如果两个表的校验和不同,则几乎可以肯定这两个表在某些方面不同。但是,由于CHECKSUM TABLE
使用的哈希函数无法保证无冲突,因此,两个不完全相同的表也可能产生相同的校验和。