下载此文档

小议Oracle外键约束修改行为(二).docx


文档分类:论文 | 页数:约4页 举报非法文档有奖
1/4
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/4 下载此文档
文档列表 文档介绍
该【小议Oracle外键约束修改行为(二) 】是由【xx】上传分享,文档一共【4】页,该文档可以免费在线阅读,需要了解更多关于【小议Oracle外键约束修改行为(二) 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。
小议Oracle外键约束修改行为(二)
Oracle的外键用来限制子表中参考的字段的值,必须在主表中存在。而且在主表的记录发生变化导致外键参考唯一约束值发生了变化时,定义了一系列的动作。
这篇简单描述一下SETTONULL操作。
上一篇描述了Oracle外键处理默认操作:NoAction,这里简单介绍一下SETTONULL操作。还是利用前面例子的表,不过约束需要重建。
SQL>DROPTABLET_C;
表已删除。
SQL>DROPTABLET_P;
表已删除。
SQL>CREATETABLET_P(IDNUMBER,NAMEVARCHAR2(30));
表已创建。
SQL>ALTERTABLET_PADDPRIMARYKEY(ID);
表已更改。
SQL>CREATETABLET_C(IDNUMBER,FIDNUMBER,NAMEVARCHAR2(30));
表已创建。
SQL>ALTERTABLET_CADDCONSTRAINTFK_T_C
2FOREIGNKEY(FID)
3REFERENCEST_P(ID)
4ONDELETESETNULL;
表已更改。
SQL>INSERTINTOT_PVALUES(1,’A’);
已创建1行。
SQL>INSERTINTOT_PVALUES(2,’B’);
已创建1行。
SQL>INSERTINTOT_CVALUES(1,1,’A’);
已创建1行。
SQL>INSERTINTOT_CVALUES(2,2,’B’);
已创建1行。
SQL>INSERTINTOT_CVALUES(3,1,’C’);
已创建1行。
SQL>COMMIT;
提交完成。
下面检查一下DELETESETNULL是如何工作的:
SQL>SELECT*FROMT_P;
IDNAME
----------------------------------------
1A
2B
SQL>SELECT*FROMT_C;
IDFIDNAME
--------------------------------------------------
11A
22B
31C
SQL>DELETET_PWHEREID=2;
已删除1行。
SQL>SELECT*FROMT_C;
IDFIDNAME
--------------------------------------------------
11A
2B
31C
SQL>UPDATET_PSETID=3;
UPDATET_PSETID=3
*第1行出现错误:
ORA-02292:违反完整约束条件()-已找到子记录日志
可以看到这个Setnonull的操作和语法中的名称一样,只对DELETE操作有效,而对于UPDATE操作无效。
这个约束操作还有一个前提,就是要求子表的外键列允许为空,否则对主表的DELETE操作会报错:
SQL>SELECT*FROMT_C;
IDFIDNAME
--------------------------------------------------
11A
2B
31C
SQL>DELETET_CWHEREID=2;
已删除1行。
SQL>ALTERTABLET_CMODIFYFIDNOTNULL;
表已更改。
SQL>DELETET_P;
DELETET_P
*第1行出现错误:
ORA-01407:无法更新("YANGTK"."T_C"."FID")为NULL
从这里也可以看到,虽然Oracle支持Settonull,但是只是实现了DELETE语句,而没有实现UPDATE语句,这和SQL标准的定义还是有区别的。
本文来源:网络收集与整理,如有侵权,请联系作者删除,谢谢!

小议Oracle外键约束修改行为(二) 来自淘豆网m.daumloan.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数4
  • 收藏数0 收藏
  • 顶次数0
  • 上传人xx
  • 文件大小31 KB
  • 时间2023-02-10
最近更新