我们正在尝试重命名MySQL(5.1.31,InnoDB)中的一个列,该列是另一个表的外键 .
起初,我们尝试使用Django-South,但遇到了一个已知问题:
http://south.aeracode.org/ticket/243
OperationalError:(1025,“将./xxx/#sql-bf_4d'重命名为'./xxx/cave_event'(错误号:150)时出错”)
和
将'./xxx/#sql-bf_4b'重命名为'./xxx/cave_event'时出错(错误号:150)
此错误150肯定与外键约束有关 . 参见例如
What does mysql error 1025 (HY000): Error on rename of './foo' (errorno: 150) mean?
http://www.xaprb.com/blog/2006/08/22/mysqls-error-1025-explained/
所以,现在我们正在尝试在原始SQL中重命名 . 看起来我们必须首先删除外键,然后重命名,然后再次添加外键 . 听起来不错吗?有没有更好的方法,因为这看起来很混乱和麻烦?
任何帮助将非常感激!
6 回答
AFAIK,删除约束,然后重命名,然后添加约束是唯一的方法 . 先备份!
如果有人在寻找语法,它会像这样:
这是常规键的SQL语法
扩展@Dewey 's answer, here' s一个小脚本,以有用的方式重命名由Hibernate生成的FK
("FK__" + table name + "__" + referenced table name)
.一点输出:
以下查询将自动构建正确的语法 . 只需执行返回的每一行,所有的FKEY都将消失 .
我将反向(加回来)作为练习给你 .
如果使用GUI工具,此任务会变得更简单 . 我尝试使用IntelliJ IDEA Database tool重命名ID列,它就像一个魅力!重命名表或列时,我不必担心外键 .
在IntelliJ IDEA Help | Renaming items中查看更多详细信息 .