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