gpt4 book ai didi

mysql - 我在这个 mySQL 外键设置中做错了什么?

转载 作者:行者123 更新时间:2023-11-30 22:31:22 25 4
gpt4 key购买 nike

已解决!在下面的单独帖子中回答

“无法添加外键约束”

只有当我在表 Consist_of 中使用代码时才会发生这种情况:

INDEX trade_name (trade_name),
FOREIGN KEY (trade_name)
REFERENCES Drug(trade_name)
ON DELETE CASCADE,
PRIMARY KEY (pre_no, dssn, pname, trade_name)

如果我从 PRIMARY KEY () 中取出 trade_name 并删除 INDEXCASCADE, 代码,然后我的东西成功编译。我想要做的就是拥有它,这样我就可以输入具有相同名称的 Drug,并让唯一键成为 pname 的组合贸易名称

所有代码:

 CREATE TABLE Doctor (
dssn INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
dname VARCHAR(30),
specialty VARCHAR(30)
);

CREATE TABLE Prescription (
pre_no INT(6) UNSIGNED PRIMARY KEY,
dssn INT(6) UNSIGNED,
INDEX dssn (dssn),
FOREIGN KEY (dssn)
REFERENCES Doctor(dssn)
ON DELETE CASCADE,
pdate DATETIME
);

CREATE Table Ph_company (
pname varchar(30) PRIMARY KEY,
phone varchar(12)
);

CREATE Table Drug (
pname varchar(30),
trade_name VARCHAR(30),
formula VARCHAR(30),
INDEX pname (pname),
FOREIGN KEY (pname)
REFERENCES Ph_company(pname)
ON DELETE CASCADE,
key(pname, trade_name)
);



CREATE Table Consist_of (
pre_no INT(6) UNSIGNED,
dssn INT(6) UNSIGNED,
pname varchar(30),
trade_name VARCHAR(30),
INDEX pre_no (pre_no),
FOREIGN KEY (pre_no)
REFERENCES Prescription(pre_no)
ON DELETE CASCADE,
INDEX dssn (dssn),
FOREIGN KEY (dssn)
REFERENCES Prescription(dssn)
ON DELETE CASCADE,
INDEX pname (pname),
FOREIGN KEY (pname)
REFERENCES Drug(pname)
ON DELETE CASCADE,
INDEX trade_name (trade_name),
FOREIGN KEY (trade_name)
REFERENCES Drug(trade_name)
ON DELETE CASCADE,
PRIMARY KEY (pre_no, dssn, pname, trade_name)

);

最佳答案

由于DRUG中的主键是由2个字段组成的组合键,所以外键也必须以同样的方式设置。因此,不要声明 2 个外键(1 个用于 pname,另一个用于 trade_name),而是这样做:

FOREIGN KEY ('pname','trade_name') 
REFERENCES Drug('pname','trade_name')

关于mysql - 我在这个 mySQL 外键设置中做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33815088/

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