如何在mysql中重命名外键?

Sim*_*mon 30 mysql foreign-keys

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

CONSTRAINT `conversation_tags_ibfk_1` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`id`)
Run Code Online (Sandbox Code Playgroud)

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

CONSTRAINT `fk_conversation_tags_tags` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`id`)
Run Code Online (Sandbox Code Playgroud)

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

bra*_*aks 61

文档:

在单个ALTER TABLE语句中允许使用多个ADD,ALTER,DROPCHANGE子句,以逗号分隔.这是标准SQL的MySQL扩展,它只允许每个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`);
Run Code Online (Sandbox Code Playgroud)

  • 在“DROP FOREIGN...”行上,使用`代替'。 (2认同)

VAS*_*hhh 6

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