MySQL - Integridad referencial?

 
Vista:
sin imagen de perfil

Integridad referencial?

Publicado por Jorge (3 intervenciones) el 09/03/2016 07:18:58
Una base de datos de una biblioteca que lleva algún tiempo funcionando contiene, entre otras tablas, estas dos:
Libros (codLibro#, titulo, editorial, codAutor)
Autores (codAutor#, nombre, apellidos, pais, fechaNacimiento)
Por un error de implementación, el campo Libros.codAutor no se hizo clave ajena durante la creación de la tabla. Ahora se ha intentado crear la clave ajena con un ALTER TABLE, pero la base de datos impide la ejecución de la instrucción, alegando que se produce una violación de la integridad referencial.
¿A qué puede deberse que la base de datos esté dando ese error?
¿Cómo puede solucionarse el problema?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 796
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Integridad referencial?

Publicado por xve (1151 intervenciones) el 09/03/2016 10:43:44
Hola Jorge, no se muy bien que formato es el campo codAutor, ni como lo estas intentando vincular, si uno a uno, o uno a muchos, pero según entiendo, no todos los libros.codAutor, tienen un valor en Autores.codAutor.

Puede ser eso?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Integridad referencial?

Publicado por Jorge (3 intervenciones) el 10/03/2016 07:28:45
Si es eso, gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 20
Ha disminuido su posición en 25 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

Integridad referencial?

Publicado por Gonzalo (103 intervenciones) el 09/03/2016 11:32:05
El error es de lo más simple y habitual: Cuando creas una FK en una tabla lo primero que hace el DBMS es verificar que todos los valores que existan en ese momento en esa tabla y para esa FK cumplan efectivamente la restricción .
Es obvio que hay al menos UN registro que no lo está haciendo, por consecuencia MySQL no puede crear la FK hasta resolver el problema.

La prueba mas simple es hacer una consulta que devuelva los casos que no se cumplen, algo como:

1
2
3
SELECT *
FROM libros
WHERE codautor NOT IN(SELECT DISTINCT codautor FROM autores);

SI hay alguno que sea diferente, te lo mostrará.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar