我已經建立了一個包含有外鍵的列的表中,設置爲ON DELETE CASCADE
(當父被刪除刪除子)如何更改外鍵參照操作? (行爲)
什麼將SQL命令是改變這ON DELETE RESTRICT
? (不能刪除父如果有子)
我已經建立了一個包含有外鍵的列的表中,設置爲ON DELETE CASCADE
(當父被刪除刪除子)如何更改外鍵參照操作? (行爲)
什麼將SQL命令是改變這ON DELETE RESTRICT
? (不能刪除父如果有子)
老問題,但增加的答案,使人們可以得到幫助
它的兩個步驟:
假設,一個table1
具有外鍵,列名爲fk_table2_id
,其中約束名稱fk_name
和table2
與密鑰t2
(,在我的示意圖中下面的內容類似)中提及。
table1 [ fk_table2_id ] --> table2 [t2]
第一步,刪除舊約束:(reference)
ALTER TABLE `table1`
DROP FOREIGN KEY `fk_name`;
通知約束被刪除,列不會被刪除
第二步,添加新的CONSTRAINT:
ALTER TABLE `table1`
ADD CONSTRAINT `fk_name`
FOREIGN KEY (`fk_table2_id`) REFERENCES `table2` (`t2`) ON DELETE CASCADE;
加入約束,柱已經存在
實施例:
我有一個UserDetails
表指Users
表:
mysql> SHOW CREATE TABLE UserDetails;
:
:
`User_id` int(11) DEFAULT NULL,
PRIMARY KEY (`Detail_id`),
KEY `FK_User_id` (`User_id`),
CONSTRAINT `FK_User_id` FOREIGN KEY (`User_id`) REFERENCES `Users` (`User_id`)
:
:
第一步:
mysql> ALTER TABLE `UserDetails` DROP FOREIGN KEY `FK_User_id`;
Query OK, 1 row affected (0.07 sec)
第二步:
mysql> ALTER TABLE `UserDetails` ADD CONSTRAINT `FK_User_id`
-> FOREIGN KEY (`User_id`) REFERENCES `Users` (`User_id`) ON DELETE CASCADE;
Query OK, 1 row affected (0.02 sec)
結果:
mysql> SHOW CREATE TABLE UserDetails;
:
:
`User_id` int(11) DEFAULT NULL,
PRIMARY KEY (`Detail_id`),
KEY `FK_User_id` (`User_id`),
CONSTRAINT `FK_User_id` FOREIGN KEY (`User_id`) REFERENCES
`Users` (`User_id`) ON DELETE CASCADE
:
ALTER TABLE DROP FOREIGN KEY fk_name;
ALTER TABLE ADD FOREIGN KEY fk_name(fk_cols)
REFERENCES tbl_name(pk_names) ON DELETE RESTRICT;
爲此,您可以在一個查詢如果你願意改變它的名字:
ALTER TABLE table_name
DROP FOREIGN KEY `fk_name`,
ADD CONSTRAINT `fk_name2` FOREIGN KEY (`remote_id`)
REFERENCES `other_table` (`id`)
ON DELETE CASCADE;
如果您有一張大桌子,這可以最大限度地減少停機時間。
請記住,MySQL在刪除外鍵後在列上保留一個簡單的索引。所以,如果你需要改變「參考」一欄,你應該做它在3個步驟
drop index
子句)您只需使用一個查詢來統治他們: ALTER TABLE products DROP FOREIGN KEY oldConstraintName, ADD FOREIGN KEY (product_id, category_id) REFERENCES externalTableName (foreign_key_name, another_one_makes_composite_key) ON DELETE CASCADE ON UPDATE CASCADE
謝謝你,老問題,但你是對的,另一個答案是有點神祕,我回來的一天。 – Moak 2013-01-20 03:57:53
也謝謝你:) – 2013-01-20 11:27:25
不應該按照原始問題的要求添加限制ON DELETE RESTRICT? – Noumenon 2015-08-02 11:36:55