Oracle没有on update cascade[转自LIVE Di 的文章]

Oracle没有on update cascade

如何将父表主键的update级联到子表的外键呢? 
Oracle可以利用约束的deferrable属性:

scott@ORA10G> create table p(pk int primary key);

表已创建。

scott@ORA10G> create table c(fk constraint c_fk 
  2  references p(pk) 
  3  deferrable 
  4  initially immediate);

表已创建。

scott@ORA10G> insert into p values(1);

已创建 1 行。

scott@ORA10G> insert into c values(1);

已创建 1 行。

由于设置的是initially immediate,所以update时会报错,因为会马上验证外键约束c_fk:

scott@ORA10G> update p set pk=2; 
update p set pk=2 
* 
第 1 行出现错误: 
ORA-02292: 违反完整约束条件 (SCOTT.C_FK) - 已找到子记录

改为deferred后,就可以让外键约束c_fk在提交的时候再去检查,这时就可以进行级联更新的操作了:

scott@ORA10G> set constraint c_fk deferred;

约束条件已设置。

scott@ORA10G> update p set pk=2;

已更新 1 行。

scott@ORA10G> update c set fk=2;

已更新 1 行。

scott@ORA10G> set constraint c_fk immediate;

约束条件已设置。

scott@ORA10G> commit;

提交完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值