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;
提交完成。