我的表中有一个外键约束,我想向它添加ON DELETE CASCADE .
我试过这个:
alter table child_table_name
modify constraint fk_name
foreign key (child_column_name)
references parent_table_name (parent_column_name) on delete cascade;
不起作用 .
编辑:
外键已经存在,外键列中有数据 .
执行语句后得到的错误消息:
ORA-02275: such a referential constraint already exists in the table
8 回答
您不能将
ON DELETE CASCADE
添加到已存在的约束中 . 您将不得不drop
并重新create
约束 . documentation表明MODIFY CONSTRAINT
子句只能修改state of a constraint(i-e:ENABLED/DISABLED
...) .首先
drop
你的外键并尝试上面的命令,把add constraint
而不是modify constraint
. 现在这是命令:此PL * SQL将向DBMS_OUTPUT写入一个脚本,该脚本将删除没有删除级联的每个约束,并使用删除级联重新创建它 .
注意:运行此脚本的输出是您自己承担的风险 . 最好阅读生成的脚本并在执行前编辑它 .
如前所述:
正如您所看到的那些必须是分开的命令,先丢弃然后添加 .
对于使用MySQL的任何人:
如果您进入
PHPMYADMIN
网页并导航到包含您要更新的外键的表,您只需单击Structure
选项卡中的Relational view
并将On delete
选择菜单选项更改为Cascade
.图片如下:
这是一个方便的解决方案!我正在使用SQL Server 2008 R2 .
如果要通过添加ON DELETE / UPDATE CASCADE来修改FK约束,请按照下列步骤操作:
第1号:
右键单击约束,然后单击 Modify
第2号:
在左侧选择约束(如果有多个约束) . 然后在右侧,折叠“INSERT AND UPDATE Specification”指向并指定删除规则或更新规则行上的操作以满足您的需要 . 之后,关闭对话框 .
第3号:
最后一步是保存这些修改(当然!)
PS:由于我想修改另一个表中引用的主键,所以它从一堆工作中救了我 .
如果要在不丢弃外键的情况下更改外键,可以执行以下操作:
MYSQL用户的答案: