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. 如何用数据结构解释计算机系统 常用数据结构
  2. Smarty vs Twig: 性能对比
  3. HIVE入门_3_数据导入导出
  4. tomcat 和 jdk 版本 对应关系
  5. Codeforces 771C
  6. Android Kotlin Flow 如何使用callbackflow
  7. python控制流代码怎么用_Python学习笔记控制流的元素
  8. 使用base标签后图片无法加载_Spring 源码学习(二)-默认标签解析
  9. Python之路(运算符)
  10. 单链表的基础操作练习
  11. Windows Mobile 6 模拟器绿色中文版 - 在PC上模拟并运行智能手机的软件游戏
  12. cad怎么画立体图形教学_cad怎么绘制三维图形,cad三维制图实例图文教程
  13. MATLAB 求解积分上、下限含有未知数的方程
  14. java使用jsoup爬虫入门
  15. st7920驱动OCMJ2X8C屏使用CGRAM自定义图标
  16. 亚马逊后台网页提示HTTP Status 400 – Bad Request无法登陆的解决办法
  17. 测试岗外包4年终上岸,这段日子说起来都是泪啊
  18. TZC 高中信息技术(Python)必修题单————题解
  19. 【软件测试】Python自动化软件测试算是程序员吗?
  20. 局域网无法访问部分网站

热门文章

  1. Pycharm添加源与添加库
  2. HTML学习笔记整理(二)
  3. java 缓冲区溢出_缓冲区溢出攻击_java教程_缓冲区溢出攻击 漏洞
  4. 谈大学英语六级考试语法与改错的复习
  5. Oracle中连接本地ORCL数据库
  6. 设计模式之里氏替换原则示例
  7. 2022大规模电商图上的风险商品检测
  8. 计算机网络应用题试题及答案,计算机网络试题(含答案).doc
  9. vscode调试代码方法
  10. RBF神经网络与BP网络优缺点比较