> Faqs > Cómo truncar una tabla con con foreign key: Error MySQL Cannot truncate

Cómo truncar una tabla con con foreign key: Error MySQL Cannot truncate

Estoy intentando hace el truncate sobre una tabla MySQL, pero no me deja.

Es una tabla que tiene claves foráneas por causa de una relación y claro, si la trunco se pierde la integridad referencial de MySQL, con lo que el sistema me adverte.

En realidad, querría truncar ambas tablas, por lo que la integridad referencial no debería ser problema una vez que ejecute todos los truncate, pero no lo puedo hacer, ni siquiera cambiando el orden de las sentencias truncate.

El error que me sale es este:

Cannot truncate a table referenced in a foreign key constraint (`BBDD`.`individual_goals`, CONSTRAINT `individual_goals_student_id_foreign` FOREIGN KEY (`student_id`) REFERENCES `BBDD`.`students` (`id`)

¿Aguna sugerencia para poder solucionar este problema?

Responder la pregunta
Editar Hacer otra preguntaPreguntar

Respuestas

Efectivamente, no puedes truncar una tabla si con ello pierdes la integridad referencial de los datos almacenados. Justamente los índices foreign sirven para evitar llegar a estados de los datos donde se pierda la integridad referencial.

Entiendo que deseas mantener los índices foreign, para que sigan funcionando, porque una solución sería simplemente eliminarlos y así podrás truncar la tabla todas las veces que quieras sin preocuparte más. MySQL no te pondrá problemas.

La solución que se antoja más adecuada sería la de inhabilitar las comprobaciones de integridad referencial momentaneament y correr los truncate table. Luego volver a activar los chequeos de las llaves foreign.

El código SQL que te saldría sería algo como esto:

SET FOREIGN_KEY_CHECKS = 0; 
TRUNCATE table invoices; 
TRUNCATE table invoice_products;
TRUNCATE table products;
SET FOREIGN_KEY_CHECKS = 1;

Ten en cuenta que las operaciones que vas a realizar pueden acabar en un estado de la base de datos inconsistente si no haces el borrado de todas las tablas que tienen datos relacionados. Es decir, si haces el truncate de invoices pero no de invoice_products podrás tener datos corruptos, lo que no es adecuado.

Miguel Angel
1791 84 107 5
clap clap eso mismo me lo solucionó