主外键关联删除(on delete set null和on delete cascade)
主外键关联,当删除的是父表数据,参照这些要删除的数据,Oracle有三种处理方式:
1、禁止删除,也是Oracle默认方法。
2、将参照要删除数据的子表对应数据置空。
3、将参照要删除数据的子表对应数据删除。
对于1,比较容易理解,不解释。
对于2,需要使用on delete set null建立外键约束。实验:
(deptno number(10) not null,
deptname varchar2(30) not null,
constraint pk_dept_test primary key(deptno));
(empno number(10) not null,
fname varchar2(20) ,
lname varchar2(20) ,
dept number(10) ,
constraint pk_emp_test primary key(empno));
add constraint fk_emp_dept_test foreign key(dept) references dept_test(deptno) on delete set null;
insert into dept_test values(2,'财务部');
insert into emp_test values (2,'Mary',' Song',1);
insert into emp_test values (4,'Linlin','Zhang',1);
EMPNO FNAME LNAME DEPT
---------- -------------------- -------------------- ----------
2 Mary Song
3 Linda Liu 2
4 Linlin Zhang
SQL> select * from dept_test;
DEPTNO DEPTNAME
---------- ------------------------------
2 财务部
可以看到emp_test中参照dept_test中deptno=1的两条记录对应dept值已经置为空。
Table truncated.
SQL> truncate table dept_test;
truncate table dept_test
*
ERROR at line 1:
ORA-02266: unique/primary keys in table referenced by enabled foreign keys
此时也是禁止清空dept_test表,drop相同。
如果想要删除父表,可以有两种方法:
1、先drop子表,再drop父表。
2、先删除约束alter table emp_test drop constraint fk_emp_dept_test;,再drop父表。
对于3,需要使用on delete cascade建立外键约束。实验:
add constraint fk_emp_dept_test foreign key(dept) references dept_test(deptno) on delete cascade;
DEPTNO DEPTNAME
---------- ------------------------------
2 财务部
SQL> select * from emp_test;
EMPNO FNAME LNAME DEPT
---------- -------------------- -------------------- ----------
3 Linda Liu 2
Table truncated.
SQL> truncate table dept_test;
truncate table dept_test
*
ERROR at line 1:
ORA-02266: unique/primary keys in table referenced by enabled foreign keys
这种删除表的和上面相同。
主外键关联删除(on delete set null和on delete cascade)相关推荐
- 转载:主外键关联删除(on delete set null和on delete cascade)
本文对mysql也成立.把创建表的数据类型从oracle支持的换成mysql支持的就行了,即: number换成int, varchar2换成varchar. 创建外键后,表的结构为: CREATE ...
- Mysql中的外键分析(什么是外键,为什么要用外键,添加外键,主外键关联删除)
有一个东西一直在我脑海中是个很烦的东西,但是这东西不搞清楚会阻碍自己的前进.自己做项目demo永远只能用一张表... 所以今天还是学习了下外键希望能够搞明白一些... 百度上搜索外键的作用" ...
- mysql 删除表数据_主外键关联表的数据删除策略
说个题外话,我从来没想过会被拼多多这款软件所魔怔,他的这种社交营销的能力,实在是太强了,在怂恿之下,开始给儿子拼个这个, 各位有空帮砍下,https://w.url.cn/s/AzlPAB9,或者扫下 ...
- Mysql基础增删改查,主外键关联
Mysql基础入门 章节导航 Mysql基础入门 创建 新增 删除 修改 查询 数据类型 主键 外键 数值计算 关联查询 1.登录mysql:mysql -uroot -p2.使用数据库: use 数 ...
- MySQL如何同时删除主外键关联的两张表中的数据
1. 编写目的 介绍一种方法,解决如下问题:如何同时删除两张相关联的表的记录. 比如说表a的外键fk依赖于表a的id,现在我们需要删除id=5的两条数据. 2. 主要方法 为了简单,推荐更改表a的外键 ...
- oracle级联 drop,请教:oralce自带主外键级联删除的原理?
從trace file看,應該是oracle internal的trigger實現這個級聯delete的. SQL> alter session set events '10046 trace ...
- oracle+cascade=gt;true,mysql数据库主外键级联删除脚本RESTRICT -- CASCADE
在项目中,我们一般在数据库设计的时候做主外键关联设计,要么就不做.但是这样不符合规范,呵呵. 建立主外键关系的时候,默认是不能级联删除的.而出现往往在删除主表的数据时报错, 需要先删除从表然后再删除主 ...
- 存在外键关联的主表truncate如何做
主外键是数据库提供的一种两表之间强制关联的方法,也可以从应用层实现. 优点 缺点 数据库实现的主外键 由数据库层机制保证,无需应用额外实现 强关联,不易扩展变更 应用实现的主外键 易扩展变更 完全由应 ...
- 数据库中主外键概念详细介绍
关于数据库的主外键设置问题 一.主外键概念 主键 1.主键 简单而言,能够唯一的表示表中的每一行数据,这样的列属性称为表的主键,使用表主键可以保证实体的完整性,可对表内数据进行修改.删除时使用 ...
最新文章
- XXL-JOB v2.0.2,分布式任务调度平台 | 多项特性优化更新
- WORD2007中无法插入CMG文件
- linux按进程分配物理内存,linux下内存管理学习心得(一)
- 别让扁平化设计平淡无奇
- python 深度学习模型训练 多GPU下如何调用
- Cocos2d-x--Box2D绘制出两个矩形框的解决方案
- java 用户日志_2020年阿里巴巴最全Java、架构师、大数据、算法PPT技术栈图册
- 不解析,使用解析对象
- 关于小程序的一些坑的总结
- html:(16):a标签
- js 日期星期 带农历
- dc持久内存与mysql_Calypso Systems推出测试软件和服务器测试傲腾数据中心级持久内存...
- 在数据库中如何查询表的创建时间?
- python连乘函数_Python常用的几种常用的内置函数
- 目标检测——不同检测算法的对比的图表写作
- 助力企业实现新增长,腾讯企点发布全新数字化客户运营解决方案
- 字符集不同导致的ORA-00972
- NSDate 时间戳与字符串转换
- 微信开放平台接入支付后不显示头像
- 2014年9月CCF软考试题