Error Cannot add or update a child row: a foreign key constraint fails

publicado por: Anonymous

Codigo que trato de ejecutar.

MariaDB [hotel]> INSERT INTO habitacion(Id_hab,Id_cli,Num_hab,Num_piso,Dias,Precio,Tip_hab) VALUES
    -> ('H01','CT01',01,2,1,1200,'sencilla');

Error que obtengo.

ERROR 1452 (23000): Cannot add or update a child row: a foreign key
constraint fails (hotel.habitacion, CONSTRAINT habitacion_ibfk_1
FOREIGN KEY (Id_cli) REFERENCES cliente (Id_cli) ON DELETE
CASCADE ON UPDATE CASCADE) MariaDB [hotel]>

Mi problema es que al crear una base de datos y en la tabla habitación me surge un error y es el error 1452, he hecho la base varias veces viendo cual puede ser error, he cambiado cosas pero me sigue saliendo el mismo error al insertar datos en alguna tabla en este caso es la de habitación al agregar datos, quien pueda ayudarme le agradezco su ayuda.
Este es el código//

Create database hotel;


use hotel;



create table recepcionista(Clav_re varchar(10) not null,
 Nombre_re varchar(20) not null,
 A_pre varchar(30) not null,
 A_mre varchar(30) not null,
 telefono varchar(15) not null,
primary key(Clav_re));




INSERT INTO recepcionista(Clav_re,Nombre_re,A_pre,A_mre,telefono) VALUES
('RT01','Juan','Osorio','Perez',914456435);



create table cliente(Id_cli varchar(10) not null,
Clav_re varchar(10) not null,
Nombre_cli varchar(25) not null,
A_pcli varchar(25) not null,
A_mcli varchar(25) not null,
Telefono_cli varchar(15) not null,
PRIMARY KEY(Id_cli),
index(Clav_re),
FOREIGN KEY(Clav_re)
REFERENCES recepcionista(Clav_re)
ON DELETE CASCADE ON UPDATE CASCADE
);


INSERT INTO cliente(Id_cli,Clav_re,Nombre_cli,A_pcli,A_mcli,telefono_cli) VALUES
('CT02','RT01','Lalo','Perez','Perez',914456435);







 create table servicio (
Id_ser varchar(10) not null,
Tipo_ser varchar(25) not null,
Fecha date not null,
primary key(Id_ser));


INSERT INTO servicio(Id_ser,Tipo_ser,Fecha) VALUES
('ST03','servicio3','2000-10-22');



create table cliSer (
Id_cli varchar(10),
Id_ser varchar(10),
PRIMARY KEY(Id_cli,Id_ser),
INDEX (Id_cli),
INDEX(Id_ser),
FOREIGN KEY(Id_cli) REFERENCES cliente(Id_cli)
ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY(Id_ser) REFERENCES servicio(Id_ser)
ON DELETE CASCADE ON UPDATE CASCADE
);

INSERT INTO cliSer(Id_cli,Id_ser) VALUES
('CT02','ST03');
('CT01','ST01'),
('CT01','ST02');



create table habitacion (
Id_hab varchar(10) not null,
Id_cli varchar(10) not null,
Num_hab int(10) not null,
Num_piso int(10) not null,
Dias int(10) not null,
Precio int(10) not null,
Tip_hab varchar(20) not null,
PRIMARY KEY(Id_hab),
index(Id_cli),
FOREIGN KEY(Id_cli)
REFERENCES cliente(Id_cli)
ON DELETE CASCADE ON UPDATE CASCADE
);



INSERT INTO habitacion(Id_hab,Id_cli,Num_hab,Num_piso,Dias,Precio,Tip_hab) VALUES
('H01','CT01',01,2,1,1200,'sencilla');

solución

Tu error se encuentra aqui en esta linea

INSERT INTO habitacion(Id_hab,Id_cli,Num_hab,Num_piso,Dias,Precio,Tip_hab) VALUES
('H01','CT01',01,2,1,1200,'sencilla');

Si nos fijamos el campo dos

Id_cli

es el ID del cliente, pero en el script que nos pones el unico cliente que insertas es este.

INSERT INTO cliente(Id_cli,Clav_re,Nombre_cli,A_pcli,A_mcli,telefono_cli) VALUES
('CT02','RT01','Lalo','Perez','Perez',914456435);

Si nos damos cuenta su llave es CT02 y tu estas tratando de insertar el CT01 el cual no existe es por eso que te marca un error de llave, por que no hay alguna llave con ese dato que tratas de poner si en cambio pones.

INSERT INTO habitacion(Id_hab,Id_cli,Num_hab,Num_piso,Dias,Precio,Tip_hab) VALUES
('H01','CT02',01,2,1,1200,'sencilla');

Podrás ver como se inserta.

Espero sea eso.

Saludos y espero tus comentarios.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published.