2012-08-10 17 views
10

Tenemos una base de datos con un par de cientos de tablas. Las tablas que usan foreign_keys usan INNODB.MySQL encuentra claves foráneas no válidas

A veces transferimos datos (tablas individuales usando mysqldump) entre nuestras bases de datos de desarrollo, escenario y producción. mysqldump deshabilita todas las comprobaciones de claves externas para facilitar la importación de datos.

De modo que con el tiempo algunas de nuestras bases de datos de no producción terminan con unos pocos registros huérfanos.

Estaba a punto de escribir una secuencia de comandos que encontraría y detectaría claves foráneas no válidas (claves que apuntan a registros faltantes) para una base de datos MySQL completa.

Sé que puedo escribir una consulta para verificar cada tabla y fkey una por una, pero pensaba que ya podría haber una herramienta para hacerlo.

Revisaría antes de escribir un script así para ver si ya hay uno.

Búsqueda en google un poco ... sorprendentemente no encontré nada.

+0

¿Qué quieres decir con "no válido"? ¿Registros huérfanos? tablas con FK que apuntan a tablas que ya no existen? –

+0

Puede hacer que su base de datos haga esto automáticamente (dependiendo de qué motor de base de datos esté utilizando) y tenerlo EN ELIMINAR CASCADA para que se mantenga la integridad referencial. –

+0

Además de stefans, tenga en cuenta que puede anular al niño o actualizarlo, no es necesario que lo elimine. – TomDunning

Respuesta

12

Si los datos ya está en y no se ha establecido restricciones fk o cascadas para borrar el padre, entonces sólo quieren:

SELECT * FROM children WHERE my_fk_id NOT IN (select id from parents); 
+1

'SELECT t1. * FROM table1 t1 LEFT JOIN table2 t2 ON t1.parent_id = t2.id DONDE t2.id ES NULO' – DavidS

+0

@Isotopo Los datos ya están ingresados, pero ya tenemos las restricciones fk en su lugar. –

+0

Esto es ideal para encontrar claves inválidas en una tabla. Sin embargo, estoy buscando una herramienta para encontrar estos para todas las tablas en toda la base de datos. –

Cuestiones relacionadas