oracle外键约束的实现

在主表记录发生变化导致外键参考的唯一约束值发生相应变化时,有如下处理方式:
限制(Restrict):主表记录发生变化(删除、更新)时,如果子表中存在相应外键值,则不允许删除。oracle实现时会报ora-02292错误,提示用户违反完整性约束 - 找到子记录。该处理方式为oracle默认的外键约束处理方式。另外,oracle实现了一种可以延迟检查约束的处理方式 - No action。这种方式和限制方式的区别在于检查发生在变化语句执行之后。
Restrict:
alter table tabsub add constraint C_FK foreign key(mid) references tabmain(mid);


No Action: 

alter table tabsub add constraint C_FK foreign key(mid) references tabmain(mid) deferrable initially deferred;


设为空值(set to null):主表记录发生变化(删除、更新)时,如果字表中存在相应外键值,则设置为空值null。虽然oracle支持set to null,但是只是实现了DELETE语句,而没有实现UPDATE语句,这和SQL标准的定义是有区别的。
set to null: 
alter table tabsub add constraint C_FK foreign key(mid) references tabmain(mid) on delete set null;


级联(cascade):主表记录发生变化(删除、更新)时,如果字表中存在相应外键值,则进行相应变化。和set to null约束一样,cascade操作也是只对DELETE语句有效,而对于UPDATE语句不起作用。和set to null不同cascade具有传递性,主表删除一条记录,会导致子表参考的记录被删除,而子表的记录被删除又会导致子表的子表记录被删除。
cascade: 
alter table tabsub add constraint C_FK foreign key(mid) references tabmain(mid) on delete cascade;

以上仅为oracle已实现的各种外键约束处理方式。级联更新、设为默认值等处理方式可通过触发器+存储过程的方式实现。oracle默认没有实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值