Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何修复';未能添加外键';在SQL中_Mysql_Foreign Keys - Fatal编程技术网

Mysql 如何修复';未能添加外键';在SQL中

Mysql 如何修复';未能添加外键';在SQL中,mysql,foreign-keys,Mysql,Foreign Keys,我正在mySQL中创建一个简单的数据库,关于我的模型的结构,我需要使用ALTERTABLE添加外键 我得到的错误是: 错误代码:1822。未能添加外键约束。丢失的 引用表中约束“Esamerale_ibfk_4”的索引 “实验室” 我知道,当您试图指向一个非唯一或主键的值时,通常会出现此错误,但我认为情况并非如此 这是我的密码 CREATE SCHEMA ProgettoBD; CREATE TABLE progettoBD.Paziente( CF_Paziente CHAR(16)

我正在mySQL中创建一个简单的数据库,关于我的模型的结构,我需要使用ALTERTABLE添加外键

我得到的错误是:

错误代码:1822。未能添加外键约束。丢失的 引用表中约束“Esamerale_ibfk_4”的索引 “实验室”

我知道,当您试图指向一个非唯一或主键的值时,通常会出现此错误,但我认为情况并非如此

这是我的密码

CREATE SCHEMA ProgettoBD;

CREATE TABLE progettoBD.Paziente(
    CF_Paziente CHAR(16) PRIMARY KEY,
    Nome_Paziente VARCHAR (10) NOT NULL,
    Cognome_Paziente VARCHAR (15) NOT NULL,
    Indirizzo VARCHAR (30),
    Luogo VARCHAR (10),
    Data VARCHAR(10),
    Telefono VARCHAR(10),
    Mail VARCHAR(30),
    Cellulare VARCHAR(10)
    );

CREATE TABLE progettoBD.Esame(
    Codice_Esame CHAR(5) PRIMARY KEY,
    Nome_Esame VARCHAR (20) NOT NULL,
    Costo INT NOT NULL
    );

CREATE TABLE progettoBD.Prenotazione(
    Codice_Prenotazione CHAR(8) PRIMARY KEY,
    Paziente CHAR(16)
    );

CREATE TABLE progettoBD.EsameReale(
    Cod_Prenotazione CHAR (8),
    Tipo_Esame CHAR(5),
    Data VARCHAR(10),
    Ora VARCHAR(5),
    Urgenza VARCHAR(15),
    Parametri VARCHAR (30),
    Laboratorio CHAR (5),
    Ospedale CHAR(4),
    Medico CHAR (16),
    Diagnosi VARCHAR (50),
    PRIMARY KEY (Cod_Prenotazione, Tipo_Esame, Data, Ora)
    );

CREATE TABLE progettoBD.Laboratorio(
    Codice_Laboratorio CHAR(5),
    Ospedale CHAR(4),
    Nome_Laboratorio VARCHAR(15) NOT NULL,
    Piano INT,
    Stanza INT,
    Responsabile_laboratorio CHAR(16),
    PRIMARY KEY (Codice_Laboratorio, Ospedale)

    );

CREATE TABLE progettoBD.Ospedale(
    Codice_Ospedale CHAR(4) PRIMARY KEY,
    Nome_Ospedale VARCHAR(15) NOT NULL,
    Indirizzo VARCHAR(30),
    Responsabile_Ospedale CHAR(16)
    );

CREATE TABLE progettoBD.Reparto(
    Codice_Reparto CHAR(5),
    Ospedale CHAR(4),
    Nome_Reparto VARCHAR(10) NOT NULL,
    Num_Telefono CHAR(10),
    PRIMARY KEY (Codice_Reparto, Ospedale)
    );

CREATE TABLE progettoBD.Medico(
    CF_Medico CHAR(16) PRIMARY KEY,
    Nome_Medico VARCHAR(10) NOT NULL,
    Cognome VARCHAR(15) NOT NULL,
    Indirizzo VARCHAR(30),
    Reparto CHAR(5),
    Ospedale CHAR(4)
    );

CREATE TABLE progettoBD.Primario(
    CF_Primario CHAR(16) PRIMARY KEY,
    Reparto_Primario CHAR(5),
    Ospedale CHAR(4)
    );

CREATE TABLE progettoBD.Volontario(
    CF_Volontario CHAR(16) PRIMARY KEY,
    Associazione VARCHAR(20)
    );

CREATE TABLE progettoBD.Specializzazione(
    Nome_Specializzazione VARCHAR(15) PRIMARY KEY
    );

CREATE TABLE progettoBD.Possiede(
    Primario VARCHAR(16),
    Specializzazione VARCHAR(15),
    PRIMARY KEY (Primario, Specializzazione)
    );

ALTER TABLE progettoBD.Prenotazione
    ADD FOREIGN KEY (Paziente) REFERENCES progettoBD.Paziente(CF_Paziente);

ALTER TABLE progettoBD.EsameReale
    ADD FOREIGN KEY (Cod_Prenotazione) REFERENCES progettoBD.Prenotazione(Codice_Prenotazione),
    ADD FOREIGN KEY (Tipo_Esame) REFERENCES progettoBD.Esame(Codice_Esame),
    ADD FOREIGN KEY (Laboratorio) REFERENCES progettoBD.Laboratorio(Codice_Laboratorio),
    ADD FOREIGN KEY (Ospedale) REFERENCES progettoBD.Laboratorio(Ospedale);

ALTER TABLE progettoBD.Laboratorio
    ADD FOREIGN KEY (Ospedale) REFERENCES progettoBD.Ospedale(Codice_Ospedale),
    ADD FOREIGN KEY (Responsabile_Laboratorio) REFERENCES progettoBD.Medico(CF_Medico);

ALTER TABLE progettoBD.Ospedale
    ADD FOREIGN KEY (Responsabile_Ospedale) REFERENCES progettoBD.Medico(CF_Medico);

ALTER TABLE progettoBD.Reparto
    ADD FOREIGN KEY (Ospedale) REFERENCES progettoBD.Ospedale(Codice_Ospedale);

ALTER TABLE progettoBD.Medico
    ADD FOREIGN KEY (Reparto) REFERENCES progettoBD.Reparto(Codice_Reparto),
    ADD FOREIGN KEY (Ospedale) REFERENCES progettoBD.Reparto(Ospedale);

ALTER TABLE progettoBD.Primario
    ADD FOREIGN KEY (CF_Primario) REFERENCES progettoBD.Medico(CF_Medico),
    ADD FOREIGN KEY (Reparto_Primario) REFERENCES progettoBD.Reparto(Codice_Reparto),
    ADD FOREIGN KEY (Ospedale) REFERENCES progettoBD.Reparto(Ospedale);

ALTER TABLE progettoBD.Volontario
    ADD FOREIGN KEY (CF_Volontario) REFERENCES progettoBD.Medico(CF_Medico);

ALTER TABLE progettoBD.Possiede
    ADD FOREIGN KEY (Primario) REFERENCES progettoBD.Primario(CF_Primario),
    ADD FOREIGN KEY (Specializzazione) REFERENCES progettoBD.Specializzazione(Nome_Specializzazione);
我已经尝试过我的代码删除这一行,它工作得非常好

ADD FOREIGN KEY (Ospedale) REFERENCES progettoBD.Laboratorio(Ospedale);

progettoBD.Laboratorio
表中的
Ospedale
字段不是索引的最左侧列,因此会显示错误消息。您或者需要单独索引
Ospedale
,或者需要更改
progettoBD.Laboratorio
表主键中字段的顺序。

progettoBD.Laboratorio
表中的
Ospedale
字段不是索引的最左侧列,因此会显示错误消息。您要么需要单独索引
Ospedale
,要么需要更改
progettoBD.Laboratorio
表主键中字段的顺序。

表progettoBD.Laboratorio中的Ospedale列未被索引。此外,progettoBD.Laboratorio.Ospedale指progettoBD.Ospedale.Codice_Ospedale。这是一个非常奇怪的问题,您试图在第二个表上引用字段,而第三个表上有一个引用

表progettoBD.LABOTORIO中的Ospedale列未编制索引。此外,progettoBD.Laboratorio.Ospedale指progettoBD.Ospedale.Codice_Ospedale。这是一个非常奇怪的问题,您试图在第二个表上引用字段,而第三个表上有一个引用

Laboartorio表中的Ospelade字段已被索引,只是该索引对于外键来说不够好。它包含在复合索引中。不一样。它只需要为字段创建索引。我知道这意味着什么,我已经提供了答案:)我刚才指出,有问题的字段已被索引。Laboartorio表中的Ospelade字段已被索引,只是该索引对于外键来说不够好。它包含在复合索引中。不一样。它只需要为字段创建索引。我知道这意味着什么,我已经提供了答案:)我刚刚注意到有问题的字段已被索引。这是一个易于搜索的常见问题解答。此外,如果您阅读了关于FKs的手册(您应该在提问之前阅读该手册),它会告诉您必须满足的条件。还有,为什么你“认为情况并非如此”,你“指向一个非唯一或主键的值[??],因为你没有“Ospedale”作为唯一或主键,而只是其中的一部分。这是一个易于搜索的常见问题解答。此外,如果您阅读了关于FKs的手册(您应该在提问之前阅读该手册),它会告诉您必须满足的条件。还有,为什么您“认为情况并非如此”,因为您没有将“Ospedale”作为唯一或主键,而只是其中的一部分,所以您“指向”的值[??]不是唯一或主键”。