質問

別のテーブルの同じ列を指すようにテーブルの2つの列に外部キーを作成しようとしていますが、エラーが発生するようです。..

ここに私がすることがあります:

CREATE TABLE test2 (
  ID INT NOT NULL AUTO_INCREMENT,  
  col1 INT NOT NULL,
  col2 INT NOT NULL, 
  PRIMARY KEY (ID),
  CONSTRAINT fk FOREIGN KEY (col1, col2)
                REFERENCES test1(ID, ID)
  ON UPDATE CASCADE
  ON DELETE RESTRICT
) ENGINE=InnoDB;

しかし、私は得る

ERROR 1005 (HY000): Can't create table 'DB.test2' (errno: 150)

ただし、列が1つしかない場合、テーブルは正しく作成されます。

誰かがエラーがどこにあるのか私に指摘できますか?

ありがとう! n

役に立ちましたか?

解決

ここで試してみて、同じエラーが発生しました。これはしかし動作します:

CREATE TABLE test2 (
  ID INT NOT NULL AUTO_INCREMENT,  
  col1 INT NOT NULL,
  col2 INT NOT NULL, 
  PRIMARY KEY (ID),
  CONSTRAINT fk FOREIGN KEY (col1)
                REFERENCES test1(ID)
  ON UPDATE CASCADE
  ON DELETE RESTRICT,
  CONSTRAINT fk2 FOREIGN KEY (col2)
                REFERENCES test1(ID)
  ON UPDATE CASCADE
  ON DELETE RESTRICT

) ENGINE=InnoDB

はい、私は知っている-あなたのスクリプト すべき 仕事(それはあまり意味をなさないように見える場合でも)。しかし、私はこの新しいバージョンが優れていると思います。

他のヒント

問題は、同じ外部キー(つまり、(ID、ID))で同じ親列を2回指定していることです。次のように動作するはずです:

Create Table Test1
    (
    PK1 int not null
    , PK2 int not null
    , Primary Key ( PK1, PK2 )
    )

Create Table Test2
    (
    Id int not null Auto_Increment
    , PK1 int not null
    , PK2 int not null
    , Primary Key ( ID )
    , Constraint FK_Test2
        Foreign Key ( PK1, PK2 )
        References Test1( PK1, PK2 )
    )

同じ親テーブル列を参照する子テーブルの2つの列が必要な場合は、rsennaに示すように、2つの外部キー参照を追加する必要があります。rsennaは2つの独立したリレーションを表します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top