插入多个MySQL外键时出错

时间:2012-05-09 12:40:15

标签: mysql

当我尝试在SQL中将当前表插入到我的表中时,我得到一个错误(Products表):

CREATE TABLE parent(

    Barcode     INT(9),
    PRIMARY KEY (Barcode)
) ENGINE=INNODB;

CREATE TABLE SuppliedBy(

    Onr         CHAR(10),
    OrgNR       INT(10),
    Date        DATE            NOT NULL,           
    PRIMARY KEY (Onr),
    FOREIGN KEY (OrgNR) REFERENCES Supplier(OrgNR)
                          ON DELETE CASCADE
                          ON UPDATE CASCADE
) ENGINE=INNODB;

CREATE TABLE Products(

    Onr     CHAR(10),
    Barcode     INT(9),
    Quantity    INT(10)         DEFAULT 0
                        CHECK (Quantity >= 0),
    PRIMARY KEY (Onr, Barcode),
    FOREIGN KEY (Onr) REFERENCES SuppliedBy(SSN)
                                ON DELETE CASCADE
                                ON UPDATE CASCADE,
    FOREIGN KEY (Barcode) REFERENCES parent(Barcode)
                                ON DELETE CASCADE
                                ON UPDATE CASCADE
)ENGINE=INNODB;

我收到以下消息:

#1005 - Can't create table '.\db_project\#sql-b58_6d.frm' (errno: 150)

我确定它与这个关系中的几个外键有关,我在互联网上搜索,但找不到解决方案。

2 个答案:

答案 0 :(得分:2)

没有列SuppliedBy.SSN

FOREIGN KEY (Onr) REFERENCES SuppliedBy(SSN)

也许你的意思是

FOREIGN KEY (Onr) REFERENCES SuppliedBy(Onr)
                            ON DELETE CASCADE
                            ON UPDATE CASCADE,

答案 1 :(得分:0)

我认为问题很可能是你定义FOREIGN KEYS指向的表之一没有你指向的索引外键字段

要使FOREIGN KEY正常工作,您指向的字段需要有一个索引。

请参阅Mysql. Can't create table errno 150

另外,请检查您是否符合创建密钥的所有条件。两个表中的列必须:

  • 是相同的数据类型
  • 大小或长度相同
  • 已定义索引。