2017-07-15 47 views
0

いくつかのコンテキストでは、私は不和のためのjavascriptボットを作成しています、私は多くの異なる情報を記録できるように大きなデータベースを作成しています。私はすべての編集 MariaDBの下でMySQLと奇妙な外部キーエラー

    1. ストアメッセージ
    2. 店の歴史的メッセージは、簡単にこれらの歴史的なメッセージの中に記載されているユーザーを検索できるように

      データベースのこの部分は使用されています。

    私はMariaDBをarch linuxの下でMySQL Workbenchで使用しています。 Here's the relevant part of the database design, done on dbdesigner.net. 問題は、一番左のテーブルで発生します。

    そして、ここでは私のエラーメッセージです:

    ライン158でスクリプトERROR 1005(HY000)を実行終了:テーブルtestを作成することができません 。 #sql-1bb_6:操作は、だから私は158のように私の外部キーに問題があることを知っているが、私は問題を見つけることができない終了コード1

    で失敗しました(エラー番号150「外部キー制約 が間違って形成されています」)。

    ALTER TABLE `messageContentHistoryMentions` 
        ADD CONSTRAINT `messageContentHistoryMentions_fk1` 
         FOREIGN KEY (`messageContentCount`) REFERENCES `messageContentHistory`(`messageContentCount`); 
    

    これについて私を困惑させる部分は、158が異なるフィールドのみで、156行と全く同じ方法でフォーマットされているということです。以下の行156が実行されます。

    ALTER TABLE `messageContentHistoryMentions` 
        ADD CONSTRAINT `messageContentHistoryMentions_fk0` 
         FOREIGN KEY (`messageID`) REFERENCES `messageContentHistory`(`messageID`); 
    

    あなたはおそらく私が非常に混乱している理由を理解することができます。
    いくつかのより多くの情報:

    • これは新しいので、MariaDBのインストールを前提とデフォルトは
    • のInnoDBエンジンが
    • を使用しているされたテーブルのすべてが外国のutf8mb4_unicode_ci
    • 両側の照合を持っていますキーは主キーで、整数で長さは8で、デフォルトは0です。

    ありがとうございました。
    編集:エラーが類似しているが、それはしている状況は非常に異なっているとして、これは重複しない

  • +0

    150は、多くの場合、制約が間違った順序で適用されたことを意味します。 –

    +0

    [mysql外部キー制約が間違って形成されているエラーです]を参照してください(https://stackoverflow.com/questions/8434518/mysql-foreign-key-constraint-is-incorrectly-formed-error) – joanolo

    +0

    [mysql外部キー制約は正しく形成されていませんerror](https://stackoverflow.com/questions/8434518/mysql-foreign-key-constraint-is-incorrectly-formed-error) – joanolo

    答えて

    0

    参照されるテーブルは、あなたのケースmessageContentHistoryには、あなたのケースでは、参照される列のインデックスを持っている必要がありますmessageContentCountは、の最初のの列(指定された順序で)としてリストされています。スキーマによれば、messageContentCountは主キーの一部ですが、最初の部分はありません。 messageIDで、主キーの一番左の部分です。

    messageContentCountに別のインデックスを追加してください:

    ALTER TABLE messageContentHistory ADD KEY (messageContentCount); 
    

    それはその後動作するはずです。

    また、目的に合っている場合は、2つの別々のキーの代わりに(messageIDmessageContentCount)に1つの外部キーを追加できます。この場合でも条件が満たされるため、これもうまくいくはずです。

    MariaDB KB for foreign keys(興味深い部分は、子テーブルの列は、インデックス...でなければならないです)

    +0

    ありがとうございました!私はあなたの提案(messageID、messageContentCount)を使っていました。これにより、同じエラーが発生した158行目以降の164行目の問題が修正されました。 – Sobeston