2011-05-31 132 views
20

我们刚刚完成了一大桌一个长期运行的迁移,并结束了与我们的conversation_tags桌子下面的约束:如何在mysql中重命名外键?

CONSTRAINT `conversation_tags_ibfk_1` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`id`) 

不幸的是,有一个错误的地方,因为我们想要的是:

CONSTRAINT `fk_conversation_tags_tags` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`id`) 

删除并重新添加约束将意味着另外两个长查询。有没有办法在单个查询中重新命名约束?

回答

40

您可以将下降并重新创建成一个查询,这应该是比两个滴约束和创造更快查询:

ALTER TABLE conversation_tags 
DROP FOREIGN KEY 'conversation_tags_ibfk_1', 
ADD CONSTRAINT `fk_conversation_tags_tags` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`id`); 
+0

显然这是比最初接受的答案更近的答案,但它也是一个更好的答案。 – RET 2013-02-09 08:00:56

+0

有没有办法用通配符重命名所有约束名称,比如abc_foo_ *到abc_bar_ *? – Dave 2017-01-30 05:08:14

+0

在“DROP FOREIGN ...”行上,使用'而不是'。 – HeavyE 2017-11-20 19:34:34

1

该功能似乎并不适用于MySQL ALTER TABLE语法。

但是它支持Oracle。

6

我很抱歉,但约束只能被丢弃和MySQL的

重新attacched