oracle 删除表数据 有外键约束,【Foreign Key】Oracle外键约束三种删除行为
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外键约束三种删除行为相关推荐
- 三种删除计算机文件的方式,电脑中的缩略图缓存文件Thumbs.db的三种删除方法
Thumbs.db是电脑系统中的缩略图缓存文件,文件本身没有问题,且默认是隐藏属性的.不过仍然会占用一定的系统空间,而且可能会利用其隐藏病毒,所以我们可以将电脑中的缩略图缓存文件Thumbs.db ...
- SQL中的PRIMARY KEY(PK)(主键)和Foreign Key (FK)(外键解析
1:ERD(entity relationship dialgram)实体属性图中PK所对应的就是每个表中主键(上图为ERD) 2:当我们用SQL语言查询表的时候,一般第一个列出的就是每个表的主键 主 ...
- 删除oracle中的一列数据,Oracle删除表数据
本篇文章帮大家学习Oracle删除表数据,包含了Oracle删除表数据使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. 在本教程中将学习如何使用Oracle DELETE语 ...
- Oracle入门(十二D)之表删除与删除表数据
一.删除表 drop table 表名; drop table t_userinfo; 二.删除表数据 (1)DML操作delete delete from 表名; (2)DDL操作truncate ...
- oracle删除表数据的两种的方式
平时写sql中我们都会用到删除语句,而平时删除表数据的时候我们经常会用到两种方式: 在oracle中,truncate.delete都可以删除表数据,具体的区别以及sql语法如下: truncate ...
- oracle删除表数据的3种方式
1. drop table SCORE_INF; //用drop删除表数据,不但会删除表中的数据,连结构也被删除了 2. truncate table SCORE_INF; //1.用truncate ...
- SQL约束(主键约束 primary key、外键约束 foreign key、唯一约束unique 、CHECK约束)
注意: A.表中有数据不能创建约束 B.视图下设置后,要点击保存(只有保存后在才看的到) c 别忘了,点刷新,才会出来呀! 1.主键约束 primary key 主键是每行的唯一标识符,仅仅通过它 ...
- 外键约束(foreign key) [MySQL][数据库]
外键约束(FOREIGN KEY(字段) REFERENCES 主表名(字段)) 外键约束的作用: 限定某个字段的引用完整性 我们之前在讲数据完整性的时候就提到过引用完整性 引用完整性(eg: 员工所 ...
- MySQL外键约束-foreign key
一.什么是外键 外键也称之为外键约束 : 关键字 foreign key 外键:外面的键,一张表的一个字段(非主键)指向另外一个表的主键, 那么该字段就称之为外键. 外键所在的表称之为子表(附表) ...
- 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 ...
最新文章
- 如何用数据结构解释计算机系统 常用数据结构
- Smarty vs Twig: 性能对比
- HIVE入门_3_数据导入导出
- tomcat 和 jdk 版本 对应关系
- Codeforces 771C
- Android Kotlin Flow 如何使用callbackflow
- python控制流代码怎么用_Python学习笔记控制流的元素
- 使用base标签后图片无法加载_Spring 源码学习(二)-默认标签解析
- Python之路(运算符)
- 单链表的基础操作练习
- Windows Mobile 6 模拟器绿色中文版 - 在PC上模拟并运行智能手机的软件游戏
- cad怎么画立体图形教学_cad怎么绘制三维图形,cad三维制图实例图文教程
- MATLAB 求解积分上、下限含有未知数的方程
- java使用jsoup爬虫入门
- st7920驱动OCMJ2X8C屏使用CGRAM自定义图标
- 亚马逊后台网页提示HTTP Status 400 – Bad Request无法登陆的解决办法
- 测试岗外包4年终上岸,这段日子说起来都是泪啊
- TZC 高中信息技术(Python)必修题单————题解
- 【软件测试】Python自动化软件测试算是程序员吗?
- 局域网无法访问部分网站