我已经建立了一个包含有外键的列的表中,设置为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