我试图创建一个名为约会的表,但是当我尝试创建它时却收到错误消息:
无法添加外键约束
我的SQL代码如下:
CREATE TABLE APPOINTMENT(
APNo VARCHAR(5),
PNo VARCHAR(5),
DNo VARCHAR(5),
APDATE DATETIME
);
ALTER TABLE APPOINTMENT
ADD PRIMARY KEY (APNo),
ADD FOREIGN KEY (PNo) REFERENCES PATIENT(PNo),
ADD FOREIGN KEY (DNo) REFERENCES DOCTOR(DNo)
;
答案 0 :(得分:0)
您的语法看起来还不错。您没有显示参照表PATIENT
和DOCTOR
的DDL,但是很可能由于未满足MySQL外键要求之一而发生错误。
来自the documentation的语录:
外键和引用键中的对应列必须具有相似的数据类型。
您必须确保DOCTOR(DNo)
和PATIENT(PNo)
均为VARCHAR(5)
。
MySQL需要外键和引用键的索引。 [...]如果这样的索引不存在,则会在引用表上自动创建。
理想情况下,DOCTOR(DNo)
和PATIENT(PNo)
应该是它们各自表的主键。否则,每个索引都必须存在一个索引(它可以是多列索引,其中被引用的列会出现一次)。
有关工作示例,请参见this db fiddle:
CREATE TABLE PATIENT(PNo VARCHAR(5) PRIMARY KEY);
CREATE TABLE DOCTOR(DNo VARCHAR(5) PRIMARY KEY);
CREATE TABLE APPOINTMENT(
APNo VARCHAR(5),
PNo VARCHAR(5),
DNo VARCHAR(5),
APDATE DATETIME
);
ALTER TABLE APPOINTMENT
ADD PRIMARY KEY (APNo),
ADD FOREIGN KEY (PNo) REFERENCES PATIENT(PNo),
ADD FOREIGN KEY (DNo) REFERENCES DOCTOR(DNo)
;