Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


14.19.5 InnoDB のエラーコード

次に示すのは、発生する可能性のある InnoDB 固有の一般的なエラーのリスト (ただし、すべてが含まれているわけではありません)、および各エラーが発生する理由と問題の解決方法に関する情報です。

  • 1005 (ER_CANT_CREATE_TABLE)

    テーブルを作成できません。エラーメッセージがエラー 150 を示している場合は、外部キー制約が正しく形成されていなかったためにテーブルの作成が失敗しました。エラーメッセージがエラー -1 を示している場合は、テーブルに内部の InnoDB テーブルの名前に一致したカラム名が含まれているためにテーブルの作成が失敗した可能性があります。

  • 1016 (ER_CANT_OPEN_FILE)

    InnoDB テーブルの .frm ファイルが存在するにもかかわらず、このテーブルが InnoDB データファイルに見つかりません。セクション14.19.3「InnoDB データディクショナリの操作のトラブルシューティング」を参照してください。

  • 1114 (ER_RECORD_FILE_FULL)

    InnoDB でテーブルスペース内の空き領域が不足しています。新しいデータファイルを追加するために、テーブルスペースを再構成してください。

  • 1205 (ER_LOCK_WAIT_TIMEOUT)

    ロック待機のタイムアウトの期限が切れました。トランザクション全体ではなく、待機時間の長すぎたステートメントがロールバックされました。innodb_lock_wait_timeout 構成オプションの値は、SQL ステートメントがほかのトランザクションの完了をより長い時間待機するようにする場合は増やし、また長時間実行されるトランザクションが多すぎるためにロックの問題が発生し、さらにビジー状態のシステム上の並列性が低下している場合は減らすことができます。

  • 1206 (ER_LOCK_TABLE_FULL)

    ロックの総数が、InnoDB でロックの管理専用に使用されているメモリーの量を超えています。このエラーを回避するには、innodb_buffer_pool_size の値を増やします。個々のアプリケーション内では、大きな操作をより小さな操作に分割することが回避方法になる場合があります。たとえば、このエラーが大きな INSERT で発生する場合は、複数のより小さな INSERT 操作を実行します。

  • 1213 (ER_LOCK_DEADLOCK)

    トランザクションデッドロックが発生し、アプリケーションで修正措置をとることができるように自動的にロールバックされました。このエラーからリカバリするには、このトランザクション内のすべての操作を再度実行します。デッドロックは、ロックに対する要求がトランザクション間で整合性のない順序で到着した場合に発生します。ロールバックされたトランザクションがそのすべてのロックを解放したため、ほかのトランザクションは要求したすべてのロックを取得できるようになりました。そのため、ロールバックされたトランザクションを再実行すると、そのトランザクションがほかのトランザクションの完了を待機しなければならないことがありますが、通常デッドロックは再発しません。デッドロックが頻繁に発生する場合は、ロック操作のシーケンス (LOCK TABLESSELECT ... FOR UPDATE など) を、問題が発生する異なるトランザクションまたはアプリケーション間で整合性があるようにしてください。詳細は、セクション14.2.11「デッドロックの対処方法」を参照してください。

  • 1216 (ER_NO_REFERENCED_ROW)

    行を追加しようとしていますが、親の行がないため、外部キー制約に違反します。最初に親の行を追加してください。

  • 1217 (ER_ROW_IS_REFERENCED)

    子を持つ親の行を削除しようとしているため、外部キー制約に違反します。最初に子を削除してください。

  • ERROR 1553 (HY000): インデックス 'fooIdx' をドロップできません。外部キー制約で必要とされています

    このエラーメッセージは、特定の参照制約を適用できる最後のインデックスを削除しようとしたときにレポートされます。

    DML ステートメントの最適なパフォーマンスを得るために、InnoDB では、親テーブルでの UPDATE および DELETE 操作で、対応する行が子テーブル内に存在するかどうかを容易にチェックできるように、インデックスは外部キーカラムに存在する必要があります。CREATE TABLECREATE INDEX、および ALTER TABLE ステートメントの副作用として、MySQL は、このようなインデックスを必要に応じて自動的に作成または削除します。

    インデックスを削除すると、InnoDB は、そのインデックスが外部キー制約のチェックに使用されていないかどうかをチェックします。同じ制約を適用するために使用できる別のインデックスが存在する場合は、引き続きインデックスを削除できます。InnoDB は、特定の参照制約を適用できる最後のインデックスを削除できないようにしています。