错误1822。无法添加外键约束

时间:2019-03-01 12:11:46

标签: mysql

This is my code and it gives me this error -> Error Code 1822. Failed to add the foreing key constraint. Missing index for constraint 'paciente_ifbk_1' in the references table 'medico'. Can anybody help me? :(

CREATE DATABASE IF NOT EXISTS hospital;
USE hospital;

CREATE TABLE IF NOT EXISTS Planta (
CodigoPlanta INT NOT NULL,
Especialidad VARCHAR(255) NOT NULL,
Camas VARCHAR(255) NOT NULL,
Habitaciones VARCHAR(255) NOT NULL,
constraint PK_CodigoPlanta PRIMARY KEY(CodigoPlanta)
);

INSERT INTO Planta VALUES ('1','Cardiología','5','2');
INSERT INTO Planta VALUES ('2','Maternidad','5','2');
INSERT INTO Planta VALUES ('3','Neurología','4','2');

CREATE TABLE IF NOT EXISTS Habitacion (
NumeroHabitacion VARCHAR(255) NOT NULL,
NumeroCamas VARCHAR(255) NOT NULL
);


INSERT INTO Habitacion VALUES ('1.1','3');
INSERT INTO Habitacion VALUES ('1.2','2');
INSERT INTO Habitacion VALUES ('2.1','2');
INSERT INTO Habitacion VALUES ('2.2','3');
INSERT INTO Habitacion VALUES ('3.1','2');
INSERT INTO Habitacion VALUES ('3.2','2');

CREATE TABLE IF NOT EXISTS Medico (
 NumeroColegiado VARCHAR(255) NOT NULL,
 Nombre VARCHAR(255) NOT NULL,
 Pacientes VARCHAR(255) NOT NULL,
 constraint PK_NumeroColegiado PRIMARY KEY(NumeroColegiado)
);

INSERT INTO Medico VALUES ('346','Alberto Escalona','2');
INSERT INTO Medico VALUES ('567','Sergio Cuevas','3');
INSERT INTO Medico VALUES ('846','Andrea Books','1');

CREATE TABLE IF NOT EXISTS Enfermero (
CodigoEnfermero VARCHAR(255) NOT NULL,
Nombre VARCHAR(255) NOT NULL,
Pacientes VARCHAR(255) NOT NULL,
constraint PK_CodigoEnfermero PRIMARY KEY(CodigoEnfermero)
);


INSERT INTO Enfermero VALUES ('426','Iván Pastor','1');
INSERT INTO Enfermero VALUES ('671','Sara Pérez','4');
INSERT INTO Enfermero VALUES ('749','Anabel Cuevas','2');

CREATE TABLE IF NOT EXISTS Paciente (
NumSeguridadSocial VARCHAR(255) NOT NULL,
Nombre VARCHAR(255) NOT NULL,
Direccion VARCHAR(255) NOT NULL,
DNI VARCHAR(255) NOT NULL,
MedicoAsignado VARCHAR(255) NOT NULL,
FOREIGN KEY (MedicoAsignado) REFERENCES Medico(Nombre),
Diagnostico VARCHAR(255) NOT NULL,
Tratamiento VARCHAR(255) NOT NULL,
NumeroHabitacion VARCHAR(255) NOT NULL,
FOREIGN KEY (NumeroHabitacion) REFERENCES Habitacion(NumeroHabitacion),
EnfermerosResponsables VARCHAR(255) NOT NULL,
FOREIGN KEY (EnfermerosResponsables) REFERENCES Enfermero(Nombre),
constraint PK_NumSeguridadSocial PRIMARY KEY(NumSeguridadSocial),
constraint PK_DNI UNIQUE(DNI)
);

INSERT INTO Paciente VALUES ('4242417','Carlos Mendoza','c/ 
Coslada','84739175J','Alberto Escalona, Sergio 
Cuevas','Esquizofrenia','Darse un agua','1.2','Sara Pérez, Iván Pastor');
INSERT INTO Paciente VALUES ('4953839','Javier Martín','c/ 
Arcoiris','28485964L', 'Sergio Cuevas','Dolor intenso en un dedo del 
pie','Amputación del dedo','2.2','Sara Pérez');
INSERT INTO Paciente VALUES ('9213813','Mónica Guillén','c/ 
Estambul','294758601S', 'Alberto Escalona, Andrea Books','Dolor de 
cabeza','Ibuprofeno','1.1','Sara Pérez, Anabel Cuevas');
INSERT INTO Paciente VALUES ('6438421','Jorge Chamborro','c/ 
Montecristo','827384918V', 'Sergio Cuevas','Dificultad 
respiratoria','Tomar ventolín','1.2','Sara Pérez, Anabel Cuevas');

/*Camas ocupadas*/
SELECT Habitacion.NumeroHabitacion, count(NumeroCamas) FROM Habitacion 
JOIN Paciente ON Habitacion.NumeroHabitacion = Paciente.NumeroHabitacion 
GROUP BY Habitacion.NumeroHabitacion;

错误是错误代码1822。无法添加前键约束。引用表“ medico”中约束“ paciente_ifbk_1”的缺少索引

1 个答案:

答案 0 :(得分:1)

MySQL要求您在列定义之后添加索引,约束定义,您的表Paciente是错误的。

manual

中查看BNF
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    (create_definition,...) # <- look here
    [table_options]
    [partition_options]

create_definition:
    col_name column_definition # <- column definitions
  | {INDEX|KEY} [index_name] [index_type] (key_part,...) # <- then the index, constraint definition
      [index_option] ...
  | {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (key_part,...)
      [index_option] ...
  | [CONSTRAINT [symbol]] PRIMARY KEY
      [index_type] (key_part,...)
      [index_option] ...
  | [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY]
      [index_name] [index_type] (key_part,...)
      [index_option] ...
  | [CONSTRAINT [symbol]] FOREIGN KEY
      [index_name] (col_name,...)
      reference_definition
  | check_constraint_definition

p.s SQL中可能存在更多错误。