1

当我尝试在 SQL 中将当前表插入到我的表中时,出现错误(产品表):

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)

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

4

2 回答 2

2

没有列SuppliedBy.SSN

FOREIGN KEY (Onr) REFERENCES SuppliedBy(SSN)

也许你的意思是

FOREIGN KEY (Onr) REFERENCES SuppliedBy(Onr)
                            ON DELETE CASCADE
                            ON UPDATE CASCADE,
于 2012-05-09T12:51:41.767 回答
0

我相信这个问题很可能是您定义 FOREIGN KEYS 指向的表之一没有您指向的索引外键字段。

为了使 FOREIGN KEY 起作用,您指向的字段需要有一个索引。

Mysql。无法创建表 errno 150

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

  • 是相同的数据类型
  • 大小或长度相同
  • 已定义索引。
于 2012-05-09T12:50:07.833 回答