小议Oracle外键约束修改行为

小议Oracle外键约束修改行为

ID:38521045

大小:109.00 KB

页数:25页

时间:2019-06-14

小议Oracle外键约束修改行为_第1页
小议Oracle外键约束修改行为_第2页
小议Oracle外键约束修改行为_第3页
小议Oracle外键约束修改行为_第4页
小议Oracle外键约束修改行为_第5页
资源描述:

《小议Oracle外键约束修改行为》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、小议Oracle外键约束修改行为(一)Oracle的外键用来限制子表中参考的字段的值,必须在主表中存在。而且在主表的记录发生变化导致外键参考唯一约束值发生了变化时,定义了一系列的动作。   在SQL92标准中定义了几种外键改变后,如何处理子表记录的动作,其中包括:   限制Restrict:这种方式不允许对被参考的记录的键值执行更新或删除的操作;置为空Settonull:当参考的数据被更新或者删除,那么所有参考它的外键值被置为空;   置为默认值Settodefault:当参考的数据被更新或者删除,那么所有参考它的外键值被置为一个默认值;   

2、级联Cascade:当参考的数据被更新,则参考它的值同样被更新,当参考的数据被删除,则参考它的子表记录也被删除;   不做操作Noaction:这种方式不允许更新或删除被参考的数据。和限制方式的区别在于,这种方式的检查发生在语句执行之后。Oracle默认才会的方式就是这种方式。   Oracle明确支持的方式包括Noaction、Settonull和Cascade.对于SettoDefault和Restrict,Oracle的约束类型并不直接支持,不过可以通过触发器来实现。   简单看一下Oracle的默认处理方式Noaction:SQL>CR

3、EATETABLET_P(IDNUMBER,NAMEVARCHAR2(30));表已创建。SQL>ALTERTABLET_PADDPRIMARYKEY(ID);表已更改。SQL>CREATETABLET_C(IDNUMBER,FIDNUMBER,NAMEVARCHAR2(30));表已创建。SQL>ALTERTABLET_CADDCONSTRAINTFK_T_C2FOREIGNKEY(FID)3REFERENCEST_P(ID);表已更改。SQL>INSERTINTOT_PVALUES(1,'A');已创建1行。SQL>INSERTINTOT_

4、PVALUES(2,'B');已创建1行。SQL>INSERTINTOT_CVALUES(1,1,'A');已创建1行。SQL>COMMIT;提交完成。对于NoAction操作而言,如果主键的记录被外键所参考,那么主键记录是无法更新或删除的。SQL>DELETET_PWHEREID=1;DELETET_PWHEREID=1*第1行出现错误:ORA-02292:违反完整约束条件(YANGTK.FK_T_C)-已找到子记录日志SQL>UPDATET_PSETID=3WHEREID=1;UPDATET_PSETID=3WHEREID=1*第1行出现错

5、误:ORA-02292:违反完整约束条件(YANGTK.FK_T_C)-已找到子记录日志SQL>DELETET_PWHEREID=2;已删除1行。不过NoAction又和Restrict操作有所区别,NoAction允许用户执行语句,在语句执行之后,或者事务结束的时候才会检查是否违反约束。而Restrict只有检测到有外键参考主表的记录,就不允许删除和更新的操作执行了。这也使得NoAction操作支持延迟约束:SQL>ALTERTABLET_CDROPCONSTRAINTFK_T_C;表已更改。SQL>ALTERTABLET_CADDCONST

6、RAINTFK_T_C2FOREIGNKEY(FID)3REFERENCEST_P(ID)4DEFERRABLEINITIALLYDEFERRED;表已更改。SQL>SELECT*FROMT_P;IDNAME----------------------------------------1ASQL>SELECT*FROMT_C;IDFIDNAME--------------------------------------------------11ASQL>DELETET_PWHEREID=1;已删除1行。SQL>INSERTINTOT_PVA

7、LUES(1,'A');已创建1行。SQL>COMMIT;提交完成。小议Oracle外键约束修改行为(二)Oracle的外键用来限制子表中参考的字段的值,必须在主表中存在。而且在主表的记录发生变化导致外键参考唯一约束值发生了变化时,定义了一系列的动作。   这篇简单描述一下SETTONULL操作。   上一篇描述了Oracle外键处理默认操作:NoAction,这里简单介绍一下SETTONULL操作。还是利用前面例子的表,不过约束需要重建。SQL>DROPTABLET_C;表已删除。SQL>DROPTABLET_P;表已删除。SQL>CREAT

8、ETABLET_P(IDNUMBER,NAMEVARCHAR2(30));表已创建。SQL>ALTERTABLET_PADDPRIMARYKEY(ID

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。