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

来源:互联网 发布:会声会影做淘宝视频 编辑:程序博客网 时间:2024/05/21 09:50

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;

提交完成。

原创粉丝点击