如何在mysql中重命名外键?

时间:2011-05-31 13:05:05

标签: mysql foreign-keys

我们刚刚在一个大型表上完成了长时间运行的迁移,最终在conversation_tags表上遇到了以下约束:

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

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

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

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

4 个答案:

答案 0 :(得分:56)

来自documentation

  

允许多个 ADD ALTER DROP CHANGE 条款   单个 ALTER TABLE 语句,以逗号分隔。 这是一个MySQL   标准SQL的扩展,它只允许每个子句中的一个   ALTER TABLE语句。

通过这种方式,您可以将drop和recreate组合到一个查询中,这应该比删除约束并在两个查询中创建它更快:

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

答案 1 :(得分:6)

对不起,但是只能删除约束并在mySQL中重新附加

答案 2 :(得分:1)

该功能似乎在mysql ALTER TABLE语法中不可用。

但Oracle支持它。

答案 3 :(得分:0)

请参阅MySQL terminology "constraints" vs "foreign keys" difference?中的答案,了解为什么约束名称与您想要的不同。 但是,MySQL没有重命名约束功能,因此需要使用所需名称DROP和ADD FK。 https://dev.mysql.com/doc/refman/5.5/en/alter-table.html