InnoDB, en MySQL, aportó en su día lo que muchos esperábamos: cumplir, entre otras cosas, con aquel concepto tan académico de integridad referencial que nos permitía estar seguros de que los datos estaban bien ligados entre ellos (siempre y cuando nuestro diseño fuera acertado, claro está 😉 )
Esto es bastante útil pero da algunas pegas en el día a día del programador. En concreto nos puede pasar que intentemos importar una copia de base de datos sobre una existente y nos encontremos con este error:
Cannot delete or update a parent row: a foreign key constraint fails.
Lógico, si lo pensamos. Tenemos las relaciones monitorizadas y ya no se puede eliminar al tun tun.
¿Solución?
Como estamos restaurando una base de datos entera no queremos mantener ninguno de los datos anteriores por lo que la restricción puede ser obviada sin ningún problema.
¿Forma de hacerlo?
Decirle a MySQL que desactive temporalmente la comprobación de la integridad con la siguiente orden:
SET FOREIGN_KEY_CHECKS=0;
Para activarlo, una vez recuperada la base de datos, con el inverso:
SET FOREIGN_KEY_CHECKS=1;
Si estáis recuperando la base de datos mediante la importación de un fichero SQL, tal vez des de un cliente como phpMyAdmin, una buena opción es integrar los dos comandos anteriores en el propio fichero SQL. El de deshabilitar el principio, y el de habilitar al final.