簡體   English   中英

如何重命名 mysql 中的外鍵?

[英]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語句中允許使用多個ADDALTERDROPCHANGE子句,以逗號分隔。 這是標准 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM