-1

我必须用所有这些复合键创建这个表。

前景(客户名称、汽车制造商、汽车模型、汽车年、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)
);

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

4

3 回答 3

0

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

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 允许您使用列的子集,只要它们是这些列的左前缀。但是您不应该这样做,因为当子行可能引用其父表中的多行时,您会得到非常混乱的结果。

于 2012-12-14T01:11:13.710 回答
0

如果您尚未创建参考表,则无法创建此表。您可以先创建所有参考表,然后使用 alter table 输入 FK 提交。

于 2021-01-24T10:01:28.383 回答
0

试试这个:第一步用主键创建表,然后对外键使用alter table命令并添加它们。

于 2021-01-06T10:37:46.333 回答