MySQL问题,无法添加外键约束

时间:2019-03-02 20:17:34

标签: mysql sql

我试图创建一个名为约会的表,但是当我尝试创建它时却收到错误消息:

  

无法添加外键约束

我的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)
;

1 个答案:

答案 0 :(得分:0)

您的语法看起来还不错。您没有显示参照表PATIENTDOCTOR的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)
;