MySQLで外部キーの追加に失敗したときの対処法
MySQLで外部キーを追加できなかった場合は、次の回避策を試してください。
- 外部キー制約を作成する際には、参照するテーブルと列が存在する必要があります。必ず外部キーを作成する前に、必要なテーブルと列が作成されていることを確認してください。
- 参照する列が同じデータ型と長さを持つこと:外部キー参照先の列は、同じデータ型と長さを持つ必要があります。参照側の列が外部キーの列と同じデータ型を持つことを確認してください。
- インデックスが参照される列に定義されていることを確認する:外部キー列と参照される列はどちらもインデックスとして定義されている必要がある。これはMySQLで外部キーを作成するための要件です。参照される列にインデックスが定義されていない場合は、外部キーを作成する前にそれに対してインデックスを追加できます。
- 外部キー制約の名前が重複していないか確認します。同名の外部キー制約がすでに存在する場合、MySQLは新しい外部キーを追加できません。外部キー制約の名前が一意であることを確認してください。
- 外部キーに対応しているかどうかテーブルエンジンを確認してください:テーブルエンジン(MyISAMなど)の中には外部リンクをサポートしないものがあります。必ず外部キーをサポートするテーブルエンジンを使用するようにしてください。または、外部キーをサポートするテーブルエンジン(InnoDBなど)に変更してください。
- MySQLサーバー上で外部キー制約が有効かどうかを確認する:MySQLサーバーでは、外部キー制約が無効になっている場合があります。my.cnfコンフィグレーションファイルを確認するか、以下のSQLステートメントを実行することで、外部キー制約が有効かどうかを確認できます: SHOW VARIABLES LIKE ‘foreign_key_checks’;
- foreign_key_checks が 0 の場合、外部キー制約が無効になっていることを示します。以下 SQL ステートメントを実行することで、外部キー制約を有効にできます。
SET foreign_key_checks = 1; - この設定を変更するにはスーパーユーザー権限が必要な場合は、上記の文の実行にスーパーユーザー権限を使用してみることを提案します。
以上の方法で問題を解決できない場合は、追加のエラー情報を取得するためにMySQLエラーログを確認する必要があります。