CHECK TABLEtbl_name
[,tbl_name
] ... [option
] ...option
= {FOR UPGRADE | QUICK | FAST | MEDIUM | EXTENDED | CHANGED}
CHECK TABLE
はテーブルのエラーを確認します。CHECK
TABLE
は
MyISAM
、InnoDB
、そして
ARCHIVE
テーブルにのみ機能します。MySQL 5.1.9
から、CHECK
は CSV
テーブルにも有効になりました。
項13.11. 「CSV
ストレージエンジン」
を参照してください。MyISAM
テーブルに対しては、キー統計もまた更新されます。
CHECK TABLE
は、既に存在していないビュー定義内で参照されるテーブルなどのような、ビューの問題も確認できます。
CHECK TABLE
は次のカラムを利用して結果セットを返します。
カラム | 値 |
Table |
テーブル名 |
Op |
いつも check
|
Msg_type |
status 、error 、info 、または
warning の1つ |
Msg_text |
メッセージ |
ステートメントは各確認済テーブルにたくさんの情報行を作成する可能性がある事に注意してください。最後の行は
status
の Msg_type
値を持ち、Msg_text
は通常
OK
になります。もし
OK
か Table is already up to
date
が得られなければ、通常はテーブルの修復を起動する必要があります。詳しくは
項4.9.4. 「テーブル保守とクラッシュ リカバリ」
を参照してください。Table is already up to
date
は、そのテーブルのストレージ
エンジンが、そのテーブルを確認する必要は無いと指示しているという意味です。
FOR UPGRADE
オプションは、名づけられたテーブルが現在の
MySQL
バージョンと互換性があるか確認します。このオプションは
MySQL 5.1.7 で追加されました。サーバは
FOR UPGRADE
を利用し、作成された時以降、各テーブルに対してデータ
タイプやインデックスに互換性の無い変更があったかどうかを確認します。もし無ければ、その確認は成功です。反対に、もし非適応性があれば、サーバはテーブルに対して総確認を行います。(少々時間がかかります。)もし総確認が成功すれば、サーバはテーブルの
.frm
ファイルに現在の MySQL
バージョン番号をマークします。.frm
ファイルをマークする事で、同じバージョンのサーバによるそのテーブルの今後の確認が早くなる事が保証されます。
データタイプの格納フォーマットが変更されたか、そのソート順が変更された為に、非適合性が発生する可能性があります。私たちの目的はそれらの変更を避ける事ですが、時として各リリースの間に、非適合性よりもさらに深刻である問題を修正する事の方が大切な事もあります。
現在は、FOR UPGRADE
でこれらの非適合性が見つかっています。
MySQL 4.1 と 5.0 の間で、InnoDB
と MyISAM
テーブルの為の
TEXT
カラム内の最後の空白のインデックス順が変更されました。
新しい DECIMAL
データタイプの格納方法は MySQL 5.0.3 と 5.0.5
の間に変更されました。
それ以外のチェックポイントは次のテーブルに表されています。これらのオプションは
MyISAM
テーブルの確認だけに適応し、InnoDB
テーブルとビューでは無視されます。
タイプ | 意味 |
QUICK |
不正リンクの確認の為に行をスキャンしないでください。 |
FAST |
適切に閉じられていないテーブルだけを確認してください。 |
CHANGED |
最後の確認以降変更されたか、または正常に閉じられていないテーブルだけを確認してください。 |
MEDIUM |
削除されたリンクが有効である事を検証する為に行をスキャンしてください。これは行のキー チェックサムも計算し、それをキーの為に計算されたチェックサムを利用して検証します。 |
EXTENDED |
各行の全てのキーに対して総キー参照を行ってください。これはテーブルが100%整合性がある事を保証しますが、時間がかかる作業です。 |
もし
QUICK
、MEDIUM
、または
EXTENDED
のどのオプションも指定されなければ、動的フォーマットである
MyISAM
テーブルのデフォルトの確認タイプは
MEDIUM
になります。これは、テーブル上で
myisamchk --medium-check
tbl_name
を起動させるのと同じ結果になります。CHANGED
か FAST
が指定されない限り、静的フォーマットの
MyISAM
テーブルのデフォルトの確認タイプは、MEDIUM
です。その場合、デフォルトは
QUICK
です。行はめったに破壊されないので、CHANGED
と FAST
の行スキャンは省かれます。
テーブルが正しく閉じられているかどうかの確認の為に簡単なチェックを行っている次の例のように、確認オプションを組み合わせる事も可能です。
CHECK TABLE test_table FAST QUICK;
注意:場合によっては
CHECK TABLE
でテーブルが変更されます。これは、テーブルが
「corrupted」 や 「not closed
properly」
と印されているにも関わらず、CHECK
TABLE
がそのテーブル内に何の問題も発見できない時に起こります。この場合、CHECK
TABLE
はテーブルに OK の印をつけます。
もしテーブルが破損すると、その問題はデータ部分ではなく、ほとんどインデックス内にあるでしょう。これまでに紹介された全ての確認タイプはインデックスをくまなく確認するので、ほとんどのエラーを見つける事ができるはずです。
もし OK
であると思われるテーブルを確認したければ、確認オプションは利用しない、または利用するのであれば
QUICK
オプションを利用しなければいけません。急いでいる為、QUICK
がデータ
ファイル中に何のエラーも発見しないかもしれないという小さいリスクを負う事ができる場合には、後者を利用してください。(ほとんどの場合、通常の利用条件下であれば、MySQL
はデータ
ファイル中に何らかのエラーを発見するはずです。その場合、そのテーブルは
「corrupted」
と印が付けられ、修復されるまでは利用できなくなります。)
FAST
と CHANGED
は、テーブルを頻繁に確認したい場合に、スクリプト(例えば、cron
から実行されるように)から利用されるようになっています。ほとんどの場合、FAST
は CHANGED
より好まれます。(MyISAM
コード内にバグを見つけた可能性がある場合のみ、この方法は好ましくありません。)
通常確認を起動した後で、MySQL
が行を更新したりキーで行を見つけたりする時に、テーブルから変なエラーが発生する場合のみEXTENDED
が利用されます。これは通常確認が成功した場合は、めったに起こらないでしょう。
CHECK TABLE
によって報告されたいくつかの問題は自動的に修復されません。
Found row where the auto_increment column has the
value 0
.
これは、 AUTO_INCREMENT
インデックス
カラムが0の値を含むテーブル内に行を持っている事を意味します。(UPDATE
ステートメントを利用して、カラムを明示的に
0
に設定する事で、AUTO_INCREMENT
カラムが 0
である行を作成する事が可能です。)
これ自体はエラーではないのですが、このテーブルを一度ダンプしそれを復旧させる、またはテーブル上に
ALTER TABLE
を実行する事を決めた時に問題を引き起こします。この場合、AUTO_INCREMENT
カラムは、複製キー
エラーのような問題を引き起こす可能性がある
AUTO_INCREMENT
カラムのルールに従って値を変更します。
警告を除去するには、カラム値を0以外の値に設定する為に
UPDATE
ステートメントを実行してください。