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

MySQL存在问题,无法添加外键约束,mysql,sql,Mysql,Sql,我正在尝试创建一个名为appointment的表,但当我尝试创建它时,收到错误: 无法添加外键约束 我的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

我正在尝试创建一个名为appointment的表,但当我尝试创建它时,收到错误:

无法添加外键约束

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

你看起来还不错。您没有显示引用表
PATIENT
DOCTOR
的DDL,但是发生错误的原因可能是未满足MySQL外键要求之一

引自:

外键和引用键中的相应列必须具有相似的数据类型

您必须确保
医生(DNo)
患者(PNo)
都是
VARCHAR(5)

MySQL需要外键和引用键的索引。[…]如果引用表不存在,则会自动在引用表上创建此类索引

理想情况下,
DOCTOR(DNo)
PATIENT(PNo)
应该是各自表的主键。否则,它们中的每一个都必须存在一个索引(它可以是一个多列索引,引用的列只出现一次)


有关工作示例,请参见:

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

你看起来还不错。您没有显示引用表
PATIENT
DOCTOR
的DDL,但是发生错误的原因可能是未满足MySQL外键要求之一

引自:

外键和引用键中的相应列必须具有相似的数据类型

您必须确保
医生(DNo)
患者(PNo)
都是
VARCHAR(5)

MySQL需要外键和引用键的索引。[…]如果引用表不存在,则会自动在引用表上创建此类索引

理想情况下,
DOCTOR(DNo)
PATIENT(PNo)
应该是各自表的主键。否则,它们中的每一个都必须存在一个索引(它可以是一个多列索引,引用的列只出现一次)


有关工作示例,请参见:

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

您必须使用多个ALTER TABLE语句可能重复的请向我们显示表
患者
医生
的DDL。您必须使用多个ALTER TABLE语句可能重复的请向我们显示表
患者
医生
的DDL。