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

[SOLUCIONADO] ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails

Estas en el tema de ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails en el foro de Mysql en Foros del Web. Hola, A ver si alguien me puede ayudar con esto. Tengo dos tablas, 'images' y 'entries'. La tabla images tiene un campo llamado entry_id que ...
  #1 (permalink)  
Antiguo 12/11/2014, 14:31
 
Fecha de Ingreso: abril-2011
Mensajes: 11
Antigüedad: 13 años, 8 meses
Puntos: 1
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails

Hola,

A ver si alguien me puede ayudar con esto. Tengo dos tablas, 'images' y 'entries'. La tabla images tiene un campo llamado entry_id que referencia al id de la tabla 'entries'.

Al hacer un insert en la tabla images me da un error 1452, he comprobado que el valor que intento insertar en el campo 'entry_id' existe en la tabla entries:

mysql> select * from entries where id=17;
+----+---------+-------+------+--------+-----------+---------------------+---------------------+
| id | user_id | title | text | public | published | created | modified |
+----+---------+-------+------+--------+-----------+---------------------+---------------------+
| 17 | 1 | NULL | NULL | 0 | 0 | 2014-11-12 19:35:40 | 2014-11-12 19:35:40 |
+----+---------+-------+------+--------+-----------+---------------------+---------------------+

Pero aún así me da error:

mysql> INSERT INTO `diary`.`images` (`title`, `description`, `entry_id`, `width`, `height`, `extension`, `user_id`, `modified`, `created`) VALUES (NULL, NULL, 17, 176, 231, 'gif', 1, '2014-11-12 19:35:40', '2014-11-12 19:35:40');
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`diary`.`images`, CONSTRAINT `fk_images_entries1` FOREIGN KEY (`entry_id`) REFERENCES `entries` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)

Los dos campos son de tipo INT,

mysql> desc entries;
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |

mysql> desc images;
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user_id | int(11) | NO | MUL | NULL | |
| entry_id | int(11) | YES | MUL | NULL | |

no tengo ni idea de porque puede estar fallando.

Muchas gracias y un saludo
Ángel
  #2 (permalink)  
Antiguo 12/11/2014, 15:39
Avatar de giuli956  
Fecha de Ingreso: noviembre-2012
Mensajes: 149
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: ERROR 1452 (23000): Cannot add or update a child row: a foreign key constr

Tengo entendido que deben llamarse igual los campos, osea el id que es primario en una tabla y foraneo en la otra, ademas de ser del mismo tipo.
Si el campo es ese que dice "id" en tu mensaje no debe ser auto_increment en ambas tablas, es decir:

Tenes que renombrar, identries por ej

Código MySQL:
Ver original
  1. create table entries(

Luego:

Código MySQL:
Ver original
  1. create table images(
  2. identries int,
  3. foreing key (identries) references entries(identries)
  4. );
  #3 (permalink)  
Antiguo 18/11/2014, 13:58
 
Fecha de Ingreso: abril-2011
Mensajes: 11
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: ERROR 1452 (23000): Cannot add or update a child row: a foreign key constr

Hola,

Muchas gracias por responder.

El problema no era ese, lo que pasaba era que una tabla tenía el engine innodb y la otra myisam, me costó verlo.

Saludos
Ángel

Etiquetas: add, campo, child, constraint, key, row, select, 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 00:22.