我们刚刚在一个大型表上完成了长时间运行的迁移,最终在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`)
删除并重新添加约束将意味着另外两个长查询。有没有办法在单个查询中重命名约束?
答案 0 :(得分:56)
允许多个 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