Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] #1452 - Cannot add or update a child row: a foreign key constraint fails

Estas en el tema de #1452 - Cannot add or update a child row: a foreign key constraint fails en el foro de Mysql en Foros del Web. Estoy probando una BD. El caso es que como al relacionarlas gráficamente con el phpmyadmin no me crea las relaciones entre tablas innoDB lo he ...
  #1 (permalink)  
Antiguo 08/10/2013, 02:24
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
#1452 - Cannot add or update a child row: a foreign key constraint fails

Estoy probando una BD. El caso es que como al relacionarlas gráficamente con el phpmyadmin no me crea las relaciones entre tablas innoDB lo he intentado manualmente.

Al escribir las siguientes instrucciones SQL

Código SQL:
Ver original
  1. ALTER TABLE prueba2 ADD FOREIGN KEY (id_prueba1) REFERENCES prueba1(id_prueba1)

Código SQL:
Ver original
  1. ALTER TABLE prueba3 ADD FOREIGN KEY (id_prueba2) REFERENCES prueba2(id_prueba2)

Creía que no iba a tener problemas, no veía que fuera a tener problemas de ningún tipo, pero me devuelve el siguiente error con las primeras instrucciones

Cita:
Cannot add or update a child row: a foreign key constraint fails (`pruebas`.`#sql-1168_1b8`, CONSTRAINT `#sql-1168_1b8_ibfk_1` FOREIGN KEY (`id_prueba1`) REFERENCES `prueba1` (`id_prueba1`))
y para las segundas instrucciones también, solo que cambiando los nombres de las tablas.

He repasado el manual y buscado información adicional por la red. Lo que he entendido es que tengo un problema con los constraints. Pero no se exactamente a qué se refiere con eso. He buscado información sobre los constraints en el manual de mysql y he encontrado esto solamente. Ahí dice que los constraints se pueden obtener al consultar el show create table, pero lo he hecho y no tienen constraints.

¿A qué se debe este problema al querer relacionar tablas con sentencias SQL?
__________________
Ayúdame a hacerlo por mi mismo.
  #2 (permalink)  
Antiguo 08/10/2013, 02:56
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: #1452 - Cannot add or update a child row: a foreign key constraint fails

Primero muestra el resultado de

Código MySQL:
Ver original
  1. SHOW CREATE TABLE prueba1;
  2. SHOW CREATE TABLE prueba2;
  3. SHOW CREATE TABLE prueba3;


Manual

Cita:
En la tabla que hace referencia, debe haber un índice donde las columnas de clave extranjera estén listadas en primer lugar, en el mismo orden.

En la tabla referenciada, debe haber un índice donde las columnas referenciadas se listen en primer lugar, en el mismo orden. En MySQL/InnoDB 5.0, tal índice se creará automáticamente en la tabla referenciada si no existe aún.
Código MySQL:
Ver original
  1. ALTER TABLE prueba2 ADD CONSTRAINT fkprueba1 FOREIGN KEY (id_prueba1) REFERENCES prueba1(id_prueba1)
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 08/10/2013, 03:10
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: #1452 - Cannot add or update a child row: a foreign key constraint fails

SI estás intentando crear una FK entre tablas qe ya contienen datos, es muy probable que al menos un registro no cumpla la restricción, y por tanto MySQL disparará el error.
Por lo demás recuerda que los tipos de columna de ambas tablas para ese campo deben ser exactamente los mismos, como te lo menciona @quimfv.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 08/10/2013, 03:44
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: #1452 - Cannot add or update a child row: a foreign key constraint fails

Efectivamente, el problema era que había insertado un registro en cada tabla. Para la próxima ya se que una vez que se han introducido registros no se puede agregar foreign keys a tablas innoDB, porque ¿siempre se cumple esta regla para las tablas innoDB o hay alguna manera de evitar este comportamiento sin borrar registro?

Y como siempre MIL gracias por la ayuda!!!
__________________
Ayúdame a hacerlo por mi mismo.
  #5 (permalink)  
Antiguo 08/10/2013, 03:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: #1452 - Cannot add or update a child row: a foreign key constraint fails

Lo que debes hacer es verificar que los datos son consistentes ANTES de crear la fk.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 08/10/2013, 04:04
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: #1452 - Cannot add or update a child row: a foreign key constraint fails

Perfecto, gracias!!!
__________________
Ayúdame a hacerlo por mi mismo.
  #7 (permalink)  
Antiguo 08/10/2013, 04:09
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: #1452 - Cannot add or update a child row: a foreign key constraint fails

Complemento:

si en pruba1 tienes

id_prueba1....
1

y en prueba2

id_prueba2,id_prueba1
1,1

no tendras problemas puesto que los registros cumplen la restricción, si en en pruba2 id_prueba1 es null tambien funcionará pero si id_prueba1 es 2 no puesto que 2 no esta en prueba1.

En general una FK admite valores que existan en la tabla referenciada o nulos, cualquier otro valor te dará error.

Lo mejor es crear la FK antes de que hayan valores, pero despues si intentas entrar un valor que no este en la tabla referenciada te lanzará el mismo error.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #8 (permalink)  
Antiguo 08/10/2013, 04:34
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: #1452 - Cannot add or update a child row: a foreign key constraint fails

Cita:
que existan en la tabla referenciada o nulos
Una aclaración:
Una FK puede contener NULL sólo en dos casos:
1) La columna que es FK es nulable.
2) La clave referida en la otra tabla no es una PK sino una clave UNIQUE.
Este ultimo caso tiene una explicación: Desde el momento en que apunta a una FK, jamás puede tener un valor NULL en la tabla origen, pero MySQL admite apuntar una FK a una clave UNIQUE en la tabla referida, que si puede tener un único valor en NULL, por lo que aplica uncidad.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 08/10/2013 a las 07:06

Etiquetas: add, child, constraint, key, php, row, sql, tabla, update
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:37.