MySQL - Integridad referencial?

   
Vista:

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
información
Otras secciones de LWP con contenido de MySQL
- Cursos de MySQL
- Temas de MySQL
- Chat de MySQL
información
Cursos y Temas de MySQL
- Tutorial básico de MySQL
- Manual básico de MySQL
- MySQL Conector MyODBC
Imágen de perfil de xve

Integridad referencial?

Publicado por xve (899 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

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

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