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 陳述式」。
總和檢查碼的值取決於資料表列格式。如果列格式變更,總和檢查碼也會變更。例如,MySQL 5.6 中在 MySQL 5.6.5 之前,時間類型(如 TIME
、DATETIME
和 TIMESTAMP
)的儲存格式已變更,因此如果將 5.5 資料表升級到 MySQL 5.6,則總和檢查碼值可能會變更。
如果兩個資料表的總和檢查碼不同,則幾乎可以確定資料表在某些方面有所不同。但是,由於 CHECKSUM TABLE
使用的雜湊函式無法保證沒有衝突,因此兩個不相同的資料表有可能產生相同的總和檢查碼。