10

テーブルの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

4

2 に答える 2

8

ここで試してみたところ、同じエラーが発生しました。ただし、これは機能します。

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

はい、わかっています。スクリプトは機能するはずです(あまり意味がないように見えても)。それでも、この新しいバージョンの方が優れていると思います。

于 2011-02-16T23:53:50.323 に答える
2

問題は、同じ外部キー(つまり、(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つの列が必要な場合は、2つの独立した関係を表すため、rsennaで示される2つの外部キー参照を追加する必要があります。

于 2011-02-17T00:10:52.060 に答える