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

[SOLUCIONADO] Claves

Estas en el tema de Claves en el foro de Mysql en Foros del Web. BUENAS, TENGO UN INCONVENIENTE QUE NO LOGRO ENTENDER Y AGRADECERIA AYUDA. tengo 3 tablas 1- obj, val, pes------ primary obj 2- lug, cap-------------primary lug 3- ...
  #1 (permalink)  
Antiguo 21/10/2013, 06:47
 
Fecha de Ingreso: septiembre-2012
Ubicación: montevideo
Mensajes: 131
Antigüedad: 12 años, 1 mes
Puntos: 0
Claves

BUENAS, TENGO UN INCONVENIENTE QUE NO LOGRO ENTENDER Y AGRADECERIA AYUDA.

tengo 3 tablas
1- obj, val, pes------ primary obj
2- lug, cap-------------primary lug
3- obj, lug-----------primary obj----index lugares

a la columna obj de tabla 3 le coloque una llave foranea y se llena a partir de la misma columna en tabla 1, el problema es que no puedo hacer lo mismo con la columna obj, el error es el siguiente:


ALTER TABLE `prueba3` ADD FOREIGN KEY ( `lugares` ) REFERENCES `juanmegasoft`.`prueba2` (
`lugares`
) ON DELETE CASCADE ON UPDATE CASCADE ;

MySQL ha dicho: Documentación
#1452 - Cannot add or update a child row: a foreign key constraint fails (`juanmegasoft/#sql-18a6_16e0f9`, CONSTRAINT `#sql-18a6_16e0f9_ibfk_2` FOREIGN KEY (`lugares`) REFERENCES `prueba2` (`lugares`) ON DELETE CASCADE ON UPDATE CASCADE

agradezco ayuda.
  #2 (permalink)  
Antiguo 21/10/2013, 07:37
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Claves

Hola jegggf:

El problema es con la información que ya tienes contenida en la tabla... lo que dice el error es muy claro, existen registros que no cumplen con la condición para ser llave foránea, (pueden ser valores nulos o valores que simplemente no existan en la tabla padre).

Antes de agregar la condición, revisa tu información, puedes hacer algo como esto:

Código MySQL:
Ver original
  1. SELECT * FROM tabla3 WHERE lug NOT IN (SELECT lug FROM tabla2)

Esto te daría todos los registros que no cumplen con la condición de ser llave foránea... a partir de esto puedes hacer dos cosas, uno, eliminar dichos registros, o dos, agregar esos lugares a tu tabla2.

haz la prueba y nos comentas.

Saludos
Leo.
  #3 (permalink)  
Antiguo 21/10/2013, 08:37
 
Fecha de Ingreso: septiembre-2012
Ubicación: montevideo
Mensajes: 131
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Claves

GRACIAS POR La RESPUESTA, TU SABES QUE revise los datos, y las columnas lugares tienen las mismas caracteristicas en las 2 tablas, varchar, not null, utf_general_ci. los datos ingresados en la primera son 1,2,3, y al hacer la consulta que me enviaste son los datos que muestra.
  #4 (permalink)  
Antiguo 21/10/2013, 09:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Claves

Para decirlo en forma simple: Al menos uno de los registros de la tabla "prueba3" tiene en la columna "lugares", un valor que no existe en ningún registro de la tabla "prueba2", en su clave primaria.
Eso es lo que sucede, y ese es el sentido de la verificación que te propone Leonardo_Josue.
Es lo que se denomina inconsistencia de datos, y es muy habitual cuando intentas crear una FK entre tablas que ya tiene registros.

Verifica los datos con cuidado.

Otra cosa, para confirmar lo que tienes, posteanos el resultado e esto:
Código MySQL:
Ver original
  1. SHOW CREATE TABLE prueba2;
  2. SHOW CREATE TABLE prueba3;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 21/10/2013, 09:33
 
Fecha de Ingreso: septiembre-2012
Ubicación: montevideo
Mensajes: 131
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Claves

tabla2 CREATE TABLE `tabla2` (
`lugares` varchar(10) N...

tabla3 CREATE TABLE `tabla3` (
`objetos` varchar(10) N...
es el resultado de la consulta que pediste.

gracias, he podido colocar la FK que buscaba gracias a la ayuda, sin los resultados esperados. necesitaria que los valores de la columna lugares tabla2 se `introduzcan` en la minsma culumna de tabla3.
  #6 (permalink)  
Antiguo 21/10/2013, 09:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Claves

No nos estás posteando el resultado completo de lo que te pedí.
Cuando usas phpMyadmin, para poder ver el resultado completo debes ampliar lo que muestra. Para eso tienes a la vista algo que dice mas o menos:
Cita:
<--T-->
Amplia, copia y postea.
Cita:
necesitaria que los valores de la columna lugares tabla2 se `introduzcan` en la minsma culumna de tabla3.
no hay automatismos: Eres tu quien tiene que hacerlo o programar para que se haga.
El sentido de una FK es proteger la integridad referencial y evitar que los programadores metan la pata. No hacer que automáticamente algo se transifera, porque el sistema no hace lo que no le dices que haga.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 21/10/2013, 09:57
 
Fecha de Ingreso: septiembre-2012
Ubicación: montevideo
Mensajes: 131
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Claves

ahi esta completo:

prueba3
CREATE TABLE `prueba3` (
`objetos` varchar(10) NOT NULL,
`lugares` varchar(10) NOT NULL,
PRIMARY KEY (`objetos`),
KEY `lugares` (`lugares`),
CONSTRAINT `prueba3_ibfk_2` FOREIGN KEY (`lugares`) REFERENCES `prueba2` (`lugares`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `prueba3_ibfk_1` FOREIGN KEY (`objetos`) REFERENCES `prueba1` (`objetos`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8


prueba2
CREATE TABLE `prueba2` (
`lugares` varchar(10) NOT NULL,
`capacidad` int(10) NOT NULL,
PRIMARY KEY (`lugares`),
KEY `capacidad` (`capacidad`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

Etiquetas: claves, 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 08:22.