MySQL 5.1 リファレンスマニュアル :: 12 SQL ステートメント構文 :: 12.5 データベース管理ステートメント :: 12.5.2 テーブル メンテナンス ステートメント :: 12.5.2.3 CHECK TABLE 構文
« 12.5.2.2 BACKUP TABLE 構文

12.5.2.4 CHECKSUM TABLE 構文 »
Section Navigation      [Toggle]
  • 12.5.2 テーブル メンテナンス ステートメント
  • 12.5.2.1 ANALYZE TABLE 構文
  • 12.5.2.2 BACKUP TABLE 構文
  • 12.5.2.3 CHECK TABLE 構文
  • 12.5.2.4 CHECKSUM TABLE 構文
  • 12.5.2.5 OPTIMIZE TABLE 構文
  • 12.5.2.6 REPAIR TABLE 構文
  • 12.5.2.7 RESTORE TABLE 構文

12.5.2.3. CHECK TABLE 構文

CHECK TABLE tbl_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 ステートメントを実行してください。

Copyright © 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates