MySQL刪除外來鍵約束問題
阿新 • • 發佈:2020-11-17
當我們在一個表中新增欄位約束的時候:
ALTER TABLE product ADD CONSTRAINT product_fk FOREIGN KEY(category_id) REFERENCES category(id);
會認為我的外來鍵約束名稱為product_fk, 然後當我們想刪除時:
ALTER TABLE product DROP FOREIGN KEY product_fk;
會出現以下的錯誤:
<e>Query: alter table product drop foreign key product_fk Error Code: 1025 Error on rename of'.\web_day09\product' to '.\web_day09\#sql2-2330-1' (errno: 152)
這是因為欄位的外來鍵約束名並不是product_fk 。
我們在資料庫中執行一下命令:
SHOW CREATE TABLE product
控制檯會顯示:
Table Create Table product CREATE TABLE `product` ( `pid` varchar(32) NOT NULL, `pname` varchar(40) DEFAULT NULL, `price` double DEFAULT NULL, `category_id` varchar(32) DEFAULT NULL, PRIMARY KEY (`pid`), KEY `category_id` (`category_id`), CONSTRAINT `product_ibfk_1` FOREIGN KEY (`category_id`) REFERENCES `category` (`cid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
從建表語句中我們發現外來鍵約束名稱是:
product_ibfk_1
然後我們再執行外來鍵刪除操作:
<n>Query: alter table product drop foreign key product_ibfk_10 row(s) affected
刪除成功。