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