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使用的哈希函数无法保证无冲突,因此,两个不完全相同的表也可能产生相同的校验和。