Vieilles questions, mais voici une solution possible. Déplacez essentiellement les données plutôt que de renommer les tables. Vous devez bien sûr vous assurer que les nouvelles données respectent les règles de clé étrangère.
SET foreign_key_checks = 0;
CREATE TABLE IF NOT EXISTS foo_old LIKE foo;
INSERT INTO foo_old SELECT * FROM foo;
TRUNCATE foo;
INSERT INTO foo SELECT * FROM foo_new;
Assurez-vous de l'exécuter en une seule requête afin que les vérifications_clé_étrangère s'appliquent à l'ensemble. J'espère que cela vous aidera.