sql >> データベース >  >> RDS >> Mysql

エラーコード:1005。テーブル'...'を作成できません(errno:150)

    エラーコード:1005-コードに間違った主キー参照があります

    通常、これは、参照されている外部キーフィールドが存在しないことが原因です。タイプミスがあるか、同じであるかどうかを確認するか、フィールドタイプの不一致がある可能性があります。外部キーにリンクされたフィールドは、定義と完全に一致する必要があります。

    いくつかの既知の原因は次のとおりです。

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

    詳細については、以下を参照してください。 MySQLエラー番号1005テーブルを作成できません



    1. テーブルGrupocakephpのFROM句エントリがありません

    2. MariaDB JSON_CONTAINS()の説明

    3. R12/R12.2のOracleForms

    4. SQL Serverで「datetime」を「datetimeoffset」に変換します(T-SQLの例)