CHECKSUM TABLE tbl_name [, tbl_name] ... [QUICK | EXTENDED]
CHECKSUM TABLE
は、テーブルの内容に対するチェックサムをレポートします。 このステートメントを使用すると、その内容が、バックアップ、ロールバック、またはデータを元の既知の状態に戻すことを目的としたその他の操作の前後で同じであることを検証できます。
このステートメントには、このテーブルに対する SELECT
権限が必要です。
このステートメントはビューではサポートされていません。 ビューに対して CHECKSUM TABLE
を実行すると、Checksum
値は常に NULL
になり、警告が返されます。
存在しないテーブルに対しては、CHECKSUM TABLE
は NULL
を返し、警告を生成します。
チェックサム操作中、そのテーブルは InnoDB
および MyISAM
に対する読み取りロックでロックされます。
デフォルトでは、テーブル全体が 1 行ごとに読み取られ、チェックサムが計算されます。 大きなテーブルでは長い時間がかかる可能性があるため、この操作は、状況に応じてのみ実行されます。 この 1 行ごとの計算は、InnoDB
や MyISAM
以外のその他のすべてのストレージエンジン、および CHECKSUM=1
句で作成されていない MyISAM
テーブルの場合に EXTENDED
句で得られるものと同じです。
CHECKSUM=1
句を使用して作成された MyISAM
テーブルの場合、CHECKSUM TABLE
または CHECKSUM TABLE ... QUICK
は、非常に高速に返すことができる「「ライブ」」テーブルチェックサムを返します。 テーブルがこれらのすべての条件を満たさない場合、QUICK
による方法は NULL
を返します。 QUICK
メソッドは、InnoDB
テーブルではサポートされません。 CHECKSUM
句の構文については、セクション13.1.20「CREATE TABLE ステートメント」を参照してください。
チェックサム値は、テーブル行フォーマットによって異なります。 行フォーマットが変更された場合は、チェックサムも変更されます。 たとえば、MySQL より前の MySQL 5.6.5 で TIME
、DATETIME
、TIMESTAMP
などの時間型の記憶域形式が変更されたため、5.5 テーブルが MySQL 5.6 にアップグレードされると、チェックサム値が変更される可能性があります。
2 つのテーブルのチェックサムが異なる場合は、それらのテーブルが何らかの点で異なることがほぼ確実です。 ただし、CHECKSUM TABLE
によって使用されるハッシュ関数は衝突がないことは保証されないため、同一でない 2 つのテーブルが同じチェックサムを生成する可能性が若干あります。