Mysql SQL外键约束错误1215

Mysql SQL外键约束错误1215,mysql,database,foreign-keys,Mysql,Database,Foreign Keys,我们正试图建立一个简单的数据库,但我们总是面临同样的错误,我确实检查了其他外键约束问题,但它们根本没有帮助 正如您所知,当我们将EER图转换为关系图时,关系会获取它们所连接的实体的主键,例如: 假设我们的实体每个都有一个主键,比如TC_NO、randevu_NO、hasta_NO和我们的关系,这些关系使他们能够获取这些实体的主键。 喜欢 然而,我们总是得到同样的错误。没有拼写错误,我们检查了几个小时,但无法解决它,我们不知道为什么这不起作用 对于需要数据库所有代码的用户: CREATE TABL

我们正试图建立一个简单的数据库,但我们总是面临同样的错误,我确实检查了其他外键约束问题,但它们根本没有帮助

正如您所知,当我们将EER图转换为关系图时,关系会获取它们所连接的实体的主键,例如: 假设我们的实体每个都有一个主键,比如TC_NO、randevu_NO、hasta_NO和我们的关系,这些关系使他们能够获取这些实体的主键。 喜欢

然而,我们总是得到同样的错误。没有拼写错误,我们检查了几个小时,但无法解决它,我们不知道为什么这不起作用

对于需要数据库所有代码的用户:

CREATE TABLE PERSON(
    isim varchar(12) not null,
    soyisim varchar(12) not null,
    cinsiyet char(1) not null,
    dogum_tarihi date not null,
    adres varchar(150) not null,
    TC_NO int not null,
    PRIMARY KEY(TC_NO),
    UNIQUE KEY(TC_NO));
CREATE TABLE EMPLOYEE(
    departman varchar(20) not null,
    sicil_no int not null,
    TC_NO int not null,
    PRIMARY KEY(TC_NO,sicil_no),
    UNIQUE KEY(sicil_no),
    FOREIGN KEY(TC_NO) REFERENCES PERSON(TC_NO) ON DELETE CASCADE
    );
CREATE TABLE PATIENT(
    hastalik_gecmisi varchar(400) not null,
    kan_grubu char(4) not null,
    hasta_no int not null,
    TC_NO int not null,
    PRIMARY KEY(TC_NO,hasta_no),
    FOREIGN KEY(TC_NO) REFERENCES PERSON(TC_NO) ON DELETE CASCADE
    );
CREATE TABLE DOCTOR(
    diploma_no int not null,
    brans varchar(40) not null,
    sicil_no int not null,
    TC_NO int not null,
    PRIMARY KEY(TC_NO,sicil_no,diploma_no),
    FOREIGN KEY(TC_NO) REFERENCES EMPLOYEE(TC_NO) ON DELETE CASCADE,
    FOREIGN KEY(sicil_no) REFERENCES EMPLOYEE(sicil_no) ON DELETE CASCADE
);
CREATE TABLE APPOINTMENT(
    hasta_no int not null,
    departman varchar(20) not null,
    randevu_no int not null,
    doktor_no int not null,
    tarih date not null,
    saat int not null,
    PRIMARY KEY(randevu_no)
);
CREATE TABLE SECRETARY(
    TC_NO int not null,
    sicil_no int not null,
    PRIMARY KEY(sicil_no,TC_NO),
    FOREIGN KEY(sicil_no) REFERENCES EMPLOYEE(sicil_no) ON DELETE CASCADE,
    FOREIGN KEY(TC_NO) REFERENCES EMPLOYEE(TC_NO) ON DELETE CASCADE
);
CREATE TABLE REQUEST(
    TC_NO int not null,
    randevu_no int not null,
    hasta_no int not null,
    PRIMARY KEY(randevu_no,TC_NO,hasta_no),
    FOREIGN KEY(hasta_no) REFERENCES PATIENT(hasta_no) ON DELETE CASCADE,
    FOREIGN KEY(randevu_no) REFERENCES APPOINTMENT(randevu_no) ON DELETE CASCADE,
    FOREIGN KEY(TC_NO) REFERENCES PATIENT(TC_NO) ON DELETE CASCADE
);
CREATE TABLE NOTIFY(
    randevu_no int not null,
    sicil_no int not null,
    PRIMARY KEY(randevu_no,sicil_no),
    FOREIGN KEY(randevu_no) REFERENCES APPOINTMENT(randevu_no) ON DELETE CASCADE,
    FOREIGN KEY(sicil_no) REFERENCES SECRETARY(sicil_no) ON DELETE CASCADE
);
CREATE TABLE CONFIRMATION(
    hasta_no int not null,
    sicil_no_s int not null,
    diploma_no int not null,
    sicil_no_d int not null,
    PRIMARY KEY(sicil_no_s,hasta_no,diploma_no,sicil_no_d),
    FOREIGN KEY(sicil_no_s) REFERENCES SECRETARY(sicil_no_s) ON DELETE CASCADE,
    FOREIGN KEY(hasta_no) REFERENCES PATIENT(hasta_no) ON DELETE CASCADE,
    FOREIGN KEY(diploma_no) REFERENCES DOCTOR(diploma_no) ON DELETE CASCADE,
    FOREIGN KEY(sicil_no_d) REFERENCES DOCTOR(sicil_no_d) ON DELETE CASCADE
);

患者表是否有复合键作为主键?您也可以显示其他表的create语句吗?

好的,我刚刚找到了解决方案。 这个链接让我思考,并以尝试失败的方式找到了解决方案


从表中生成外键时,如果该键也是该表中的外键,则应执行外键,还有唯一的键,这样他们就可以有索引并与较低的表连接。

不,它没有一个组合键作为主键,我在主要问题中添加了完整的数据库代码。昨晚我也遇到了同样的问题。我在您的表中再次尝试了它,但没有成功。您可以从患者表中添加一个外键,但不能从患者表中添加外键另外我认为这是mysql中的一个限制。我发现并修复了这个问题,作为一个新的anwser编写。
CREATE TABLE PERSON(
    isim varchar(12) not null,
    soyisim varchar(12) not null,
    cinsiyet char(1) not null,
    dogum_tarihi date not null,
    adres varchar(150) not null,
    TC_NO int not null,
    PRIMARY KEY(TC_NO),
    UNIQUE KEY(TC_NO));
CREATE TABLE EMPLOYEE(
    departman varchar(20) not null,
    sicil_no int not null,
    TC_NO int not null,
    PRIMARY KEY(TC_NO,sicil_no),
    UNIQUE KEY(sicil_no),
    FOREIGN KEY(TC_NO) REFERENCES PERSON(TC_NO) ON DELETE CASCADE
    );
CREATE TABLE PATIENT(
    hastalik_gecmisi varchar(400) not null,
    kan_grubu char(4) not null,
    hasta_no int not null,
    TC_NO int not null,
    PRIMARY KEY(TC_NO,hasta_no),
    FOREIGN KEY(TC_NO) REFERENCES PERSON(TC_NO) ON DELETE CASCADE
    );
CREATE TABLE DOCTOR(
    diploma_no int not null,
    brans varchar(40) not null,
    sicil_no int not null,
    TC_NO int not null,
    PRIMARY KEY(TC_NO,sicil_no,diploma_no),
    FOREIGN KEY(TC_NO) REFERENCES EMPLOYEE(TC_NO) ON DELETE CASCADE,
    FOREIGN KEY(sicil_no) REFERENCES EMPLOYEE(sicil_no) ON DELETE CASCADE
);
CREATE TABLE APPOINTMENT(
    hasta_no int not null,
    departman varchar(20) not null,
    randevu_no int not null,
    doktor_no int not null,
    tarih date not null,
    saat int not null,
    PRIMARY KEY(randevu_no)
);
CREATE TABLE SECRETARY(
    TC_NO int not null,
    sicil_no int not null,
    PRIMARY KEY(sicil_no,TC_NO),
    FOREIGN KEY(sicil_no) REFERENCES EMPLOYEE(sicil_no) ON DELETE CASCADE,
    FOREIGN KEY(TC_NO) REFERENCES EMPLOYEE(TC_NO) ON DELETE CASCADE
);
CREATE TABLE REQUEST(
    TC_NO int not null,
    randevu_no int not null,
    hasta_no int not null,
    PRIMARY KEY(randevu_no,TC_NO,hasta_no),
    FOREIGN KEY(hasta_no) REFERENCES PATIENT(hasta_no) ON DELETE CASCADE,
    FOREIGN KEY(randevu_no) REFERENCES APPOINTMENT(randevu_no) ON DELETE CASCADE,
    FOREIGN KEY(TC_NO) REFERENCES PATIENT(TC_NO) ON DELETE CASCADE
);
CREATE TABLE NOTIFY(
    randevu_no int not null,
    sicil_no int not null,
    PRIMARY KEY(randevu_no,sicil_no),
    FOREIGN KEY(randevu_no) REFERENCES APPOINTMENT(randevu_no) ON DELETE CASCADE,
    FOREIGN KEY(sicil_no) REFERENCES SECRETARY(sicil_no) ON DELETE CASCADE
);
CREATE TABLE CONFIRMATION(
    hasta_no int not null,
    sicil_no_s int not null,
    diploma_no int not null,
    sicil_no_d int not null,
    PRIMARY KEY(sicil_no_s,hasta_no,diploma_no,sicil_no_d),
    FOREIGN KEY(sicil_no_s) REFERENCES SECRETARY(sicil_no_s) ON DELETE CASCADE,
    FOREIGN KEY(hasta_no) REFERENCES PATIENT(hasta_no) ON DELETE CASCADE,
    FOREIGN KEY(diploma_no) REFERENCES DOCTOR(diploma_no) ON DELETE CASCADE,
    FOREIGN KEY(sicil_no_d) REFERENCES DOCTOR(sicil_no_d) ON DELETE CASCADE
);