【发布时间】:2011-09-17 02:32:56
【问题描述】:
我正在尝试用新表替换 InnoDB 表,并且我希望所有指向旧表的外键引用都指向新表。
所以我尝试了这个:
SET foreign_key_checks = 0;
ALTER TABLE foo RENAME foo_old;
ALTER TABLE foo_new RENAME foo;
不幸的是,即使禁用了 foreign_key_checks,所有指向 foo 的引用都会更改为指向 foo_old。现在我正在寻找任何一个
- 一种无需重建整个表即可更改外键引用的方法,或者
- 一种在不更新外键引用的情况下重命名表的方法。
我尝试删除外键并重新创建它们,但由于表很大,因此需要几个小时。替换表的全部目的是在有限的停机时间内进行模式更改。
【问题讨论】:
-
有谁知道2015年这个问题有没有更新?
-
替换表是否相同,或稍作修改?例如,改变可以由一个改变来完成吗?如果是这样,您可能需要查看pt-online-schema-change --alter-foreign-keys-change。