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

Problema Clave foranea

Estas en el tema de Problema Clave foranea en el foro de Mysql en Foros del Web. Buenos días Gente, haber si me podéis echar una mano por que ya me estoy volviendo loco, Tengo una tabla en la que ya contiene ...
  #1 (permalink)  
Antiguo 03/10/2014, 02:18
 
Fecha de Ingreso: julio-2014
Ubicación: Holanda
Mensajes: 27
Antigüedad: 9 años, 9 meses
Puntos: 0
Problema Clave foranea

Buenos días Gente, haber si me podéis echar una mano por que ya me estoy volviendo loco, Tengo una tabla en la que ya contiene una clave foránea, pero ahora quiero agregar otra clave foranea pero me sale el siguiente error:


Código MySQL:
Ver original
  1. aLTER TABLE `maquinas`
  2.   ADD  FOREIGN KEY (`id_modelo`) REFERENCES `modelo_maquina` (`id`) ON UPDATE CASCADE;
  3.  
  4. #1452 - Cannot add or update a child row: a foreign key constraint fails (`averias_bd`.`#sql-f50_12a`, CONSTRAINT `#sql-f50_12a_ibfk_2` FOREIGN KEY (`id_modelo`) REFERENCES `modelo_maquina` (`id`) ON UPDATE CASCADE)

El caso es que creo que tengo que crear un CONSTRAINT para la clave foreana o algo de eso , haber si alguien me ayuda a ver la luz xD
  #2 (permalink)  
Antiguo 03/10/2014, 05:02
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, 4 meses
Puntos: 2658
Respuesta: Problema Clave foranea

Ese error puede producirse en ciertas circunstancias, sa saber:
1) Se intenta apuntar campo que será FK a un campo que no es PK en la tabla referida.
2) Las columna definidas en ambas tablas no son exactamente iguales en tipo, rango o charset.
3) La tabla donde se define la FK ya contiene datos, y al menos uno de los registros no cumple con la restricción de FK-->PK.

El tercero es el más usual, y para resolverlo hay que verificar los datos de la tabla.
Algo como
Código MySQL:
Ver original
  1. SELECT M.*
  2. FROM maquinas M LEFT JOIN modelo_maquina MM ON M.id_modelo = MM.id
  3. WHERE MM.id IS NULL;
te debería devolver registros si hay alguno que no cumpla con la condicion de FK.

Revisas si hay inconsistencias de tipo de columna es un poco más complicado. Necesitaríamos ver los CREATE TABLE, que se pueden obtener de este modo:
Código MySQL:
Ver original
  1. SHOW CREATE TABLE maquinas;
  2. SHOW CREATE TABLE modelo_maquina;
Eso devolverá la sentencia CREATE TABLE que crea cada una de las tablas que estás usando en el caso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: clave, sql, tabla
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 17:20.