エラーコード:1005-コードに間違った主キー参照があります
通常、これは、参照されている外部キーフィールドが存在しないことが原因です。タイプミスがあるか、同じであるかどうかを確認するか、フィールドタイプの不一致がある可能性があります。外部キーにリンクされたフィールドは、定義と完全に一致する必要があります。
いくつかの既知の原因は次のとおりです。
- 2つのキーフィールドのタイプやサイズが正確に一致していません。たとえば、
INT(10)
の場合 キーフィールドはINT(10)
である必要がありますINT(11)
ではありません またはTINYINT
。SHOW
を使用してフィールドサイズを確認することをお勧めしますCREATE
TABLE
クエリブラウザはINTEGER
だけを視覚的に表示することがあるためです 両方のINT(10)
およびINT(11)
。また、1つがSIGNED
でないことを確認する必要があります もう1つはUNSIGNED
。両方とも完全に同じである必要があります。 - 参照しようとしているキーフィールドの1つにインデックスがないか、主キーではありません。リレーションシップのフィールドの1つが主キーでない場合は、そのフィールドのインデックスを作成する必要があります。
- 外部キー名は、既存のキーの複製です。外部キーの名前がデータベース内で一意であることを確認してください。これをテストするには、キー名の最後にランダムな文字をいくつか追加するだけです。
- テーブルの一方または両方が
MyISAM
テーブル。外部キーを使用するには、テーブルが両方ともInnoDB
である必要があります 。 (実際には、両方のテーブルがMyISAM
の場合 そうすれば、エラーメッセージは表示されません。キーは作成されません。)クエリブラウザでは、テーブルタイプを指定できます。 - カスケードを指定しました
ON
DELETE
SET
NULL
、ただし、関連するキーフィールドはNOT
に設定されていますNULL
。これを修正するには、カスケードを変更するか、フィールドをNULL
を許可するように設定します。 値。 - 文字セットと照合のオプションが、テーブルレベルとキー列の個々のフィールドレベルの両方で同じであることを確認してください。
- 外部キー列にデフォルト値(つまり、default =0)があります
- リレーションシップのフィールドの1つは、組み合わせ(複合)キーの一部であり、独自の個別のインデックスはありません。フィールドには複合キーの一部としてインデックスがありますが、制約で使用するには、そのキーフィールドに対してのみ個別のインデックスを作成する必要があります。
-
ALTER
に構文エラーがあります ステートメント、またはリレーションシップのフィールド名の1つを間違って入力しました - 外部キーの名前が最大長の64文字を超えています。
詳細については、以下を参照してください。 MySQLエラー番号1005テーブルを作成できません