[英]How do I rename a foreign key in mysql?
我們剛剛在一個大表上完成了一個長時間運行的遷移,並最終在我們的 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`)
刪除和重新添加約束將意味着另外兩個長查詢。 有沒有辦法在單個查詢中重命名約束?
從文檔中:
單個ALTER TABLE語句中允許使用多個ADD 、 ALTER 、 DROP和CHANGE子句,以逗號分隔。 這是標准 SQL 的 MySQL 擴展,每個 ALTER TABLE 語句只允許每個子句中的一個。
這樣,您可以將刪除和重新創建組合到一個查詢中,這應該比刪除約束並在兩個查詢中創建它更快:
ALTER TABLE conversation_tags
DROP FOREIGN KEY `conversation_tags_ibfk_1`,
ADD CONSTRAINT `fk_conversation_tags_tags` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`id`);
抱歉,只能在 mySQL 中刪除和重新附加約束
mysql ALTER TABLE 語法中似乎沒有該功能。
但是它支持 Oracle。
請參考我在MySQL 術語“約束”與“外鍵”區別中的回答? 了解為什么約束名稱與您想要的不同。 但是,MySQL 沒有重命名約束功能,因此需要使用所需的名稱 DROP 和 ADD FK。 https://dev.mysql.com/doc/refman/5.5/en/alter-table.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.