在多列上添加外键

时间:2011-02-16 23:29:26

标签: mysql foreign-keys mysql-error-1005

我正在尝试在表的两列上创建一个外键以指向另一个表的同一列,但我似乎遇到了错误...

这就是我的所作所为:

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)

但是,如果我只有一列,则表格已正确创建。

有人能指出错误在哪里吗?

由于 Ñ

2 个答案:

答案 0 :(得分: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

是的,我知道 - 你的脚本应该工作(即使它似乎没有多大意义)。然而,我想这个新版本更好。

答案 1 :(得分:2)

问题似乎是您在同一个外键中指定了两次相同的父列(即(ID,ID))。以下应该有效:

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 )
    )

如果是这种情况,你希望子表中的两列引用相同的父表列,那么你必须添加两个外键引用,如rsenna所示,因为它们代表两个独立的关系。