CHECK TABLE tbl_name[,tbl_name...] [option [option...]] option = QUICK | FAST | MEDIUM | EXTENDED | CHANGED
CHECK TABLE
は、MyISAM
テーブルと InnoDB
テーブルにのみ有効です。MyISAM
テーブルの場合、このテーブルで myisamchk
--medium-check table_name
を実行するのと同じです。
オプションを何も指定しなければ、MEDIUM
が使用されます。
1
つまたは複数のテーブルのエラーをチェックします。MyISAM
テーブルでは、キー統計が更新されます。このコマンドは、以下のカラムで構成されるテーブルを返します。
カラム | 値 |
Table | テーブル名 |
Op | 常に check
|
Msg_type |
status 、error 、info 、warning
のいずれか |
Msg_text | メッセージ |
注意:
このステートメントは、チェックした各テーブルに関する多くの情報レコードを生成します。
正常な場合、Msg_type
は
status
で、Msg_text
は通常 OK
になります。
OK
または Table is already up to
date
が得られなければ、テーブルの修復が必要と考えられます。See
項4.5.6. 「myisamchk
を使用したテーブルの保守とクラッシュのリカバリ」。 Table is already
up to date
は、テーブルのストレージマネージャが、そのテーブルにチェックが必要ないと判断したことを意味します。
以下のチェックタイプがあります。
タイプ | 意味 |
QUICK |
不正リンクをチェックするためのレコードスキャンを実行しない。 |
FAST |
正しく閉じられなかったテーブルだけをチェックする。 |
CHANGED |
前回のチェック後に変更されたテーブルと、正しく閉じられなかったテーブルだけをチェックする。 |
MEDIUM |
レコードをスキャンして、削除されたリンクが問題なかったことを確認する。また、レコードのキーチェックサムを計算し、キーの計算されたチェックサムを使って確認する。 |
EXTENDED |
各レコードですべてのキーの完全キールックアップを実行する。テーブルの整合性が 100% 保証されるが、時間がかかる。 |
動的サイズの MyISAM
テーブルでは、チェックが開始された場合、常に
MEDIUM
チェックが実行されます。静的サイズのレコードは破損していることが非常にまれなので、QUICK
および FAST
でレコードスキャンをスキップします。
チェックオプションは以下のように組み合わせることができます。以下の例では、テーブルが正しく閉じられたかどうかを確認するクイックチェックを行います。
CHECK TABLE test_table FAST QUICK;
注意: 場合によっては
CHECK TABLE
はテーブルを変更します。これは、テーブルに
'corrupted' または 'not closed properly'
というマークがあるのに、CHECK
TABLE
がテーブル内に問題を発見しなかった場合に発生します。この場合、CHECK
TABLE
はテーブルを OK とマークします。
テーブルが破損している場合、データ部分よりもインデックスに問題のある方が可能性が高いです。上記のチェックタイプはいずれも、インデックスを完全にチェックするのでほとんどのエラーは発見できます。
問題がないと思われるテーブルをチェックする場合、チェックオプションを使用しないか、または
QUICK
オプションを使用します。QUICK
は、急いでいるとき、およびデータファイルのエラーが見逃されるかもしれないという非常に小さな危険性を無視できる場合に使用します。ほとんどの場合、MySQL
は通常どおりに使用していれば、データファイルのエラーを発見します。発見した場合、そのテーブルには
'corrupted'
のマークが付き、修復するまでそのテーブルは使用できません。
FAST
および CHANGED
は、テーブルをときどきチェックしたい場合に、スクリプトから(たとえば
cron
から)実行されることを想定しています。通常は、CHANGED
よりも FAST
の方を使用してください(これが当てはまらないのは、MyISAM
コード内にバグが疑われる場合のみです)。
EXTENDED
は、通常のチェック後に、MySQL
がレコードを更新したりキーでレコードを検索しようとした際に、不自然なエラーが発生する場合にのみ使用します(通常のチェックが正常に終了した後でエラーが発生するのは非常にまれなことです)。
CHECK TABLE
で報告される問題の中には、自動的に修正されないものがあります。
Found row where the auto_increment column has the
value 0
。
これは、AUTO_INCREMENT
インデックスカラムの値が 0
になっているレコードがテーブルにあることを意味する(UPDATE
ステートメントで明示的に
AUTO_INCREMENT
カラム値を 0
に設定すれば、このカラムが 0
のレコードを作成することは可能である)。
これ自体はエラーではないが、テーブルをダンプしてリストアしようとしたり、テーブルで
ALTER TABLE
を実行しようとすると問題が発生する。この場合、AUTO_INCREMENT
カラムは AUTO_INCREMENT
カラムのルールに基づいて値を変更するため、重複キーエラーなどの原因となる。
警告を消すには、UPDATE
ステートメントを実行してこのカラム値を 0
以外の値に設定する。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.