Estoy introduciendo la integridad de la base de datos utilizando restricciones innodb en la próxima versión de mi aplicación. Todo va bien, pero algunas de mis tablas tienen registros con referencias eliminadas (registros muertos) y debido a ellos no puedo agregar restricciones a la tabla.Manejo de la integridad de la base de datos
Estoy tratando:
ALTER TABLE `article` ADD FOREIGN KEY (`author_id`) REFERENCES `authors` (`id`) ON DELETE CASCADE;
Y consigo:
#1452 - Cannot add or update a child row: a foreign key constraint fails (`books`.<result 2 when explaining filename '#sql-442_dc'>, CONSTRAINT `#sql-442_dc_ibfk_1` FOREIGN KEY (`author_id`) REFERENCES `authors` (`id`) ON DELETE CASCADE)
ejecución de esta consulta, descubrí que más de 500 registros no tienen referencias (se eliminaron los autores, pero se mantuvieron sus artículos) :
SELECT `articles`.`id`
FROM `articles` LEFT JOIN `authors` ON `articles`.`author_id` = `authors`.`id`
WHERE ISNULL(`authors`.`id`);
Entonces, antes de que pueda agregar una restricción, debo lidiar con ellas. ¿Cómo borro todos los registros que obtengo usando la consulta anterior?
He intentado:
DELETE FROM `articles` WHERE `id` IN (
SELECT `articles`.`id`
FROM `articles` LEFT JOIN `authors` ON `articles`.`author_id` = `authors`.`id`
WHERE ISNULL(`authors`.`id`);
)
Pero MySQL responde:
You can't specify target table 'articles' for update in FROM clause
Cualquier ayuda en esto será apreciado considerablemente.
Vea allí: http://stackoverflow.com/questions/4770035/handling-database-integrity (duplicado) – Benj
@Benj ¿Por qué su enlace apunta a esto ** exacto ** SO poste? –
@BuhakeSindi Bueno ... parece que no pude copiar y pegar ... Gracias por señalarlo. Lo siento, no puedo (años después) recuperar el enlace original. – Benj