Stare pytania, ale możliwe jest ich obejście. Zasadniczo przenieś dane, zamiast zmieniać nazwy tabel. Musisz oczywiście upewnić się, że nowe dane są zgodne z zasadami klucza obcego.
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;
Upewnij się, że uruchamiasz to jako jedno zapytanie, aby zagraniczne_key_checks odnosiło się do całości. Mam nadzieję, że to pomoże.