Oracle使用外键来限制子表中参考的字段值,要求子表中的数据必须在主表中存在。当主表的记录发生变化时导致外键参考唯一约束值发生了变化时,Oracle指定了三种动作:默认值(类似于restrict)、delete cascade和delete set null。实际体验一下他们对删除操作的不同效果。1.创建主表及子表并简单初始化几条数据1)创建主表t_parent,并初始化三条记录sec@ora10g> create table t_parent (parent_id int primary key, name varchar2(10));sec@ora10g> insert into t_parent values (1,'record1');sec@ora10g> insert into t_parent values (2,'record2');sec@ora10g> insert into t_parent values (3,'record3');sec@ora10g> commit;2)创建三种类型的子表t_child1、t_child2和t_child3(1)no action类型sec@ora10g> create table t_child1 (child1_id int primary key, parent_id int);sec@ora10g> alter table t_child1 add constraint FK_t_child1 foreign key (parent_id) references t_parent (parent_id);sec@ora10g> insert into t_child1 values (1,1);sec@ora10g> commit;(1)cascade类型sec@ora10g> create table t_child2 (child2_id int primary key, parent_id int);sec@ora10g> alter table t_child2 add constraint FK_t_child2 foreign key (parent_id) references t_parent (parent_id) on delete cascade;sec@ora10g> insert into t_child2 values (2,2);sec@ora10g> commit;(1)set null类型sec@ora10g> create table t_child3 (child2_id int primary key, parent_id int);sec@ora10g> alter table t_child3 add constraint FK_t_child3 foreign key (parent_id) references t_parent (parent_id) on delete set null;sec@ora10g> insert into t_child3 values (3,3);sec@ora10g> commit;2.确认主表和子表中的数据sec@ora10g> select * from T_PARENT;PARENT_ID NAME---------- ------------------------------1 record12 record23 record3sec@ora10g> select * from T_CHILD1;CHILD1_ID  PARENT_ID---------- ----------1          1sec@ora10g> select * from T_CHILD2;CHILD2_ID  PARENT_ID---------- ----------2          2sec@ora10g> select * from T_CHILD3;CHILD2_ID  PARENT_ID---------- ----------3          33.尝试对具有默认类型外键参照的主表记录进行删除sec@ora10g> delete from T_PARENT where parent_id = 1;delete from T_PARENT where parent_id = 1*ERROR at line 1:ORA-02292: integrity constraint (SEC.FK_T_CHILD1) violated - child record foundsec@ora10g> select * from T_CHILD1;CHILD1_ID  PARENT_ID---------- ----------1          1在此类型下,不允许删除。4.尝试对具有delete cascade类型外键参照的主表记录进行删除sec@ora10g> delete from T_PARENT where parent_id = 2;1 row deleted.sec@ora10g> select * from T_CHILD2;no rows selected成功,级联删除成功。5.尝试对具有delete set null类型外键参照的主表记录进行删除sec@ora10g> delete from T_PARENT where parent_id = 3;1 row deleted.sec@ora10g> select * from T_CHILD3;CHILD2_ID  PARENT_ID---------- ----------3主表记录可以完成删除,子表中对应的内容被设置为NULL。6.小结以上就是在Oracle数据库,当主表信息删除后对应的子表中记录的三种不同的处理方式,针对具体的应用场合请选择合适类型。Good luck.secooler10.03.21-- The End --

oracle 删除表数据 有外键约束,【Foreign Key】Oracle外键约束三种删除行为相关推荐

  1. 三种删除计算机文件的方式,电脑中的缩略图缓存文件Thumbs.db的三种删除方法

    ‍ Thumbs.db是电脑系统中的缩略图缓存文件,文件本身没有问题,且默认是隐藏属性的.不过仍然会占用一定的系统空间,而且可能会利用其隐藏病毒,所以我们可以将电脑中的缩略图缓存文件Thumbs.db ...

  2. SQL中的PRIMARY KEY(PK)(主键)和Foreign Key (FK)(外键解析

    1:ERD(entity relationship dialgram)实体属性图中PK所对应的就是每个表中主键(上图为ERD) 2:当我们用SQL语言查询表的时候,一般第一个列出的就是每个表的主键 主 ...

  3. 删除oracle中的一列数据,Oracle删除表数据

    本篇文章帮大家学习Oracle删除表数据,包含了Oracle删除表数据使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. 在本教程中将学习如何使用Oracle DELETE语 ...

  4. Oracle入门(十二D)之表删除与删除表数据

    一.删除表 drop table 表名; drop table t_userinfo; 二.删除表数据 (1)DML操作delete delete from 表名; (2)DDL操作truncate ...

  5. oracle删除表数据的两种的方式

    平时写sql中我们都会用到删除语句,而平时删除表数据的时候我们经常会用到两种方式: 在oracle中,truncate.delete都可以删除表数据,具体的区别以及sql语法如下: truncate ...

  6. oracle删除表数据的3种方式

    1. drop table SCORE_INF; //用drop删除表数据,不但会删除表中的数据,连结构也被删除了 2. truncate table SCORE_INF; //1.用truncate ...

  7. SQL约束(主键约束 primary key、外键约束 foreign key、唯一约束unique 、CHECK约束)

    注意: A.表中有数据不能创建约束 B.视图下设置后,要点击保存(只有保存后在才看的到) c   别忘了,点刷新,才会出来呀! 1.主键约束 primary key 主键是每行的唯一标识符,仅仅通过它 ...

  8. 外键约束(foreign key) [MySQL][数据库]

    外键约束(FOREIGN KEY(字段) REFERENCES 主表名(字段)) 外键约束的作用: 限定某个字段的引用完整性 我们之前在讲数据完整性的时候就提到过引用完整性 引用完整性(eg: 员工所 ...

  9. MySQL外键约束-foreign key

    一.什么是外键 外键也称之为外键约束 :  关键字  foreign key 外键:外面的键,一张表的一个字段(非主键)指向另外一个表的主键, 那么该字段就称之为外键. 外键所在的表称之为子表(附表) ...

  10. mysql a foreign key constraint fails_外键记录有存在,插入数据却报错a foreign key constraint fails...

    今天在MySQL的一张表里插记录时,出现一个错误提示: Cannot add or update a child row: a foreign key constraint fails (`jeesn ...

最新文章

  1. 在Zf2中实现Controller按照URL自动注册
  2. 使用基本的socket函数
  3. 多态及其内部原理剖析
  4. HTML DOM 事件
  5. 毕业二十年,为什么人和人之间的差距那么大?
  6. 沫沫金:PS快速扣头发丝【详细教程】
  7. HTML5+CSS把footer固定在底部
  8. Swift App启动干了什么事情, 删掉UIApplicationMain,自定义实现main类, Main Runloop
  9. MATLAB 排序函数(先按第一列排序(主排序)然后再按第二列排序(次排序))
  10. 全民居家都带不动的AI健身,到底是不是伪命题?
  11. 写HTML为什么骨架生成不了,HTML骨架
  12. 阴历转换阳历c语言csdn,JavaScript实现公历转换农历
  13. python爬贴吧回复_Python爬虫实践,获取百度贴吧内容
  14. reco-fetch
  15. C++Primer 第15章 OOP
  16. 响应式 - 使视频自适应于屏幕宽度
  17. 用计算机亩换算成平方,公倾,平方米,英亩,市亩,平方公里等常见面积单位转换在线计算器_三贝计算网_23bei.com...
  18. TCP之快重传与快恢复
  19. c语言内存池中 二维数组,C语言内存池使用模型-2 - Mr.南柯 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  20. 使用ExcelPackage生成Excel2007电子表格

热门文章

  1. 太感动了,看于丹讲解论语
  2. Airport Announcements URAL - 1889
  3. 【开启全民开发时代】无代码RPA 赋予业务人员IT能力,简单易学的工具化软件
  4. java在线考试系统源码下载_Java在线考试系统 SpringMVC实现 源码下载
  5. 三菱FX系列恒压供水程序和三菱触摸屏程序三台水泵,手动自动均可
  6. 欢迎通过您的电子邮件或QQ订阅“游侠安全网”更新
  7. javaweb洗衣店系统ssh
  8. Spring循环依赖问题
  9. [Android] Surface、SurfaceHolder与SurfaceView
  10. FCN全卷积网络理解及代码实现(来自pytorch官方实现)