1

さて、私は2つのテーブルを持っています

publica_evento_grupo

Field | Type | Null | Key | Default | Extra
id_evento_grupo int(10) unsigned    NO  PRI     auto_increment
id_evento       int(8)  unsigned    NO  MUL     
id_grupo        int(8)  unsigned    NO  MUL     
identificacao   varchar(55)         NO  

publica_identificacao_publicacao

Field | Type | Null | Key | Default | Extra
id_evento       int(8) unsigned NO  PRI     
identificacao   varchar(55)     NO  PRI     

publica_evento_grupo. id_eventoin は、publica_eventoという 3 番目のテーブルへの外部キーですが、テーブルへの列と共に外部キーでもありますpublica_identificacao_publicacaoidentificacao. 問題は、キーによってpublica_evento_grupopublica_identificacao_publicacaoid_eventoに関連付ける外部キーを作成する必要があることですが、列で別の FK を作成しようとすると、identificacao以下の errno が表示されます。

 [Err] 1005 - Can't create table '#sql-1049_1980992' (errno: 150).

ご覧のとおり、テーブルpublica_identificacao_publicacaoには 2 つの PK があり、それがそれらを関連付けるには 2 つの FK である必要がある理由です。私が知る限り、後でインデックスを作成する必要があるため、まだインデックスを作成していません。 FK 制約を追加し、 evento_grupoidentificacao_publicacaoid_eventoの間の列に FK 制約を作成できましたが、列だけでこのエラーが発生する理由がわかりませんidentificacao

編集 1: @RolandBouman そのコマンドを使用する権限がありません SHOW ENGINE INNODB STATUS

EDIT 2: @Geoff_Montee 渡されたコマンドは実際に機能しました。なぜその構造を使用するのかを理解するには、この質問を見てくださいMySQL UNIQUE Con​​straint multiple columns condition

4

2 に答える 2

9

実際の DDL がなければ、そう簡単に言うことはできません。私はすることをお勧めします:

SHOW ENGINE INNODB STATUS;

このエラーが発生した直後。出力で、次のようなセクションを探します。

------------------------
LATEST FOREIGN KEY ERROR
------------------------
121026 22:40:18 Error in foreign key constraint of table test/#sql-154c_94:
foreign key(rid) references bla(id):
Cannot find an index in the referenced table where the
referenced columns appear as the first columns, or column types
in the table and the referenced table do not match for constraint.
Note that the internal storage type of ENUM and SET changed in
tables created with >= InnoDB-4.1.12, and such columns in old tables
cannot be referenced by such columns in new tables.
See http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html
for correct foreign key definition.

外部キー定義の何が問題なのかについての詳細な情報がそこにあります。

于 2012-10-26T20:43:55.600 に答える
0

このエラーは通常、参照テーブルと参照テーブルの間に型の不一致があるために発生します。この場合、タイプは一致しているように見えます。

主複合キーの両方のフィールドに制約を設けることを検討しましたか? 最初に既存の外部キー制約を削除する必要がある場合がありますid_evento

ALTER TABLE publica_evento_grupo ADD FOREIGN KEY 
    (id_evento, identificacao) REFERENCES 
    publica_identificacao_publicacao (id_evento, identificacao);

この場合のエラーは、複合主キーの一部のみに外部キー制約を追加しようとしたことが原因のようです。

identificacao他のテーブルに存在しますか? 複合主キーの一部だけに外部キー制約を追加するのはなぜですか?

このように考えてみてください...

publica_evento_grupoテーブルにidentificacaoフィールド自体への外部キー制約があるとしましょう。publica_identificacao_publicacaoあなたが持っているテーブルにも言いましょう(1, "some string")(2, "some string"). したがって、削除してもその場所に(2, "some string")残します。(1, "some string")テーブルで参照さ(1, "some string")れている行publica_evento_grupoは、文句を言うべきではありませんが、文句を言うでしょう!

したがって、主キーのすべてに外部キー制約を追加するか、まったく追加しないかのように思えます。

于 2012-10-26T20:21:19.990 に答える