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
。InnoDB
資料表不支援 QUICK
方法。 如需 CHECKSUM
子句的語法,請參閱 第 15.1.20 節,「CREATE TABLE 陳述式」。
校驗和值取決於資料表資料列格式。 如果資料列格式變更,校驗和也會變更。 例如,在 MySQL 5.6 之前的 MySQL 5.6.5 中,時間類型(例如 TIME
、DATETIME
和 TIMESTAMP
)的儲存格式已變更,因此如果將 5.5 資料表升級至 MySQL 5.6,校驗和值可能會變更。
如果兩個資料表的校驗和不同,則幾乎可以確定這兩個資料表在某些方面有所不同。 不過,由於 CHECKSUM TABLE
使用的雜湊函數不能保證沒有衝突,因此兩個不相同的資料表有可能產生相同的校驗和。