sql delete删除的数据怎么恢复_【PL/SQL】 删除表格数据三种情况与思路

a0ac09d335303eef49904b06d03dd87a.png

看完这章你会学习到以下内容:

  • 删除数据的三种方法
  • 主表从表间数据量的不同,应采取什么的策略?

删除数据的几种方法和区别,可以参考之前的专栏文章

Simon Gan:【PL/SQL 面试】三种删除方式的区别​zhuanlan.zhihu.com
74827fb349ea6e624ff8269d6082e961.png

实际案例: 有以下几种不同的场景,对应使用不同的删除策略。

16b7a3ac0a9e3e1e02b5bf1f28ba8e91.png

第一种: 100万数据中删除部门10的数据。
分析: 量级比较少,直接可以用Delete和Where搭配删除。
第二种:将6000万的数据全部删除,Delete和Where搭配删除都可以,但是考虑到效率问题,直接用Truncate语法:Truncate table 表名.


第三种:将6000万的数据中删除部门10,Delete 可以用,但是删除的效率相当低,必须要循环6000万次,每次进行判断,然后才有效果。
这里需要引用Merge Into , 相当于增量同步插入后,增量更新数据,这个更新也包含删除

语法格式:MERGE(不是所有数据库都通用)
MERGE INTO 目标表 USING (增量)
ON (匹配字段)
WHEN MATCHED THEN UPDATE SET --UPDATE和SET之间不需要加表名
WHEN NOT MATCHED THEN INSERT VALUE --INSERT和VALUES之间不需要加INTO 表名
Q: 请问这个不能直接用DELETE 语句?
A: 不行,因为当用匹配字段搭配后,我们必须要用Update语句

Q:为什么一般来说,这个会比Delete加Where语句一起更好?
A: (我的个人理解,之后也许会更正)因为,自己和自己一起连接。
这里面把部门10看做了一个整体,当有匹配到这表里面部门10,有点像索引的意思。
那就判断如果匹配成功后就直接删除。

MERGE INTO EMP E
	USING (SELECT * FROM EMP WHERE DEPTNO = 10) S
	ON (S.EMPNO = E.EMPNO)
	WHEN MATCHED THEN
	UPDATE SET E.COMM = E.COMM DELETE WHERE 1 = 1; 


第四种:本身部门10的数据量也很多,占据整个总表的95%以上。如果直接删除则很久才能执行。 思路在于:我们先创建一张临时表,然后只选择查询部门20,部门30,部门40即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值