gpt4 book ai didi

mysql - SQL 无法创建表(错误号 : 150)

转载 作者:行者123 更新时间:2023-11-29 15:29:51 25 4
gpt4 key购买 nike

我必须使用所有这些组合键创建此表。

前景(客户名称、汽车制造商、汽车型号、汽车年、carextcolour、cartrim、选项代码)

以上所有字段都带有下划线,表明它们是主要字段。所以有 7 个主要复合键。

由于某种原因,这不会创建表。

CREATE TABLE prospect
(Custname VARCHAR(25) NOT NULL,
Carmake VARCHAR(25) NOT NULL,
Carmodel VARCHAR(20) NOT NULL,
Caryear VARCHAR(4) NOT NULL,
Carextcolour VARCHAR(10) NOT NULL,
Cartrim VARCHAR(10) NOT NULL,
Optioncode CHAR(4),
CONSTRAINT pkprospect PRIMARY KEY (Custname, Carmake, Carmodel, Caryear, Carextcolour, Cartrim, Optioncode),
CONSTRAINT fkprospect FOREIGN KEY (Custname) REFERENCES customer(Custname),
CONSTRAINT fk2prospect FOREIGN KEY (Carmake) REFERENCES car(Carmake),
CONSTRAINT fk3prospect FOREIGN KEY (Carmodel) REFERENCES car(Carmodel),
CONSTRAINT fk4prospect FOREIGN KEY (Caryear) REFERENCES car(Caryear),
CONSTRAINT fk5prospect FOREIGN KEY (Carextcolour) REFERENCES car(Carextcolour),
CONSTRAINT fk6prospect FOREIGN KEY (Cartrim) REFERENCES car(Cartrim),
CONSTRAINT fk7prospect FOREIGN KEY (Optioncode) REFERENCES optiontable(Optioncode)
);

我用来创建这个充满组合键的表的代码。

最佳答案

您应该创建一个外键约束来引用每个引用表的完整主键或唯一键。您无法为引用表主键中间的各个列创建单独的外键。

CREATE TABLE prospect
(Custname VARCHAR(25) NOT NULL,
Carmake VARCHAR(25) NOT NULL,
Carmodel VARCHAR(20) NOT NULL,
Caryear VARCHAR(4) NOT NULL,
Carextcolour VARCHAR(10) NOT NULL,
Cartrim VARCHAR(10) NOT NULL,
Optioncode CHAR(4),
CONSTRAINT pkprospect PRIMARY KEY (Custname, Carmake, Carmodel, Caryear, Carextcolour, Cartrim, Optioncode),
CONSTRAINT fkprospect FOREIGN KEY (Custname) REFERENCES customer(Custname),
CONSTRAINT fk2prospect FOREIGN KEY (Carmake, Carmodel, Caryear, Carextcolour, Cartrim)
REFERENCES car(Carmake, Carmodel, Caryear, Carextcolour, Cartrim),
CONSTRAINT fk7prospect FOREIGN KEY (Optioncode) REFERENCES optiontable(Optioncode)
);

我在上面使用了“应该”这个词,因为 InnoDB 在外键方面实际上比 ANSI/ISO SQL 标准更宽松一些。标准 SQL 规定外键的列必须是引用的主键或唯一键的列的完整列表。

InnoDB 允许您使用列的子集,只要它们是这些列的左前缀即可。但您不应该这样做,因为当子行可能引用其父表中的行时,您会得到非常困惑的结果。

关于mysql - SQL 无法创建表(错误号 : 150),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58821452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com