古い質問ですが、次の方法が考えられます。基本的に、テーブルの名前を変更するのではなく、データを移動します。もちろん、新しいデータが外部キールールに準拠していることを確認する必要があります。
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;
これを1つのクエリとして実行して、foreign_key_checksがすべてに適用されるようにしてください。これがお役に立てば幸いです。