Oracle数据库反复数据删除的三种情形-备份恢复[Oracle防范]
本文“Oracle数据库反复数据删除的三种情形-备份恢复[Oracle防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在对数据库举行操作历程中我们大概会碰到这种情形,表中的数据大概反复呈现,使我们对数据库的操作历程中带来很多的不便,那么怎么删除这些反复没有效的数据呢?
反复数据删除技术可以供应更大的备份容量,实现更长时间的数据保存,还能实现备份数据的持续考证,提高数据恢复服务水平,便利实现数据容灾等. 反复的数据大概有这样两种情形,第一种时表中只有某些字段一样,第二种是两行记录完好一样.Oracle数据库反复数据删除技术有以下上风:更大的备份容量、数据能得到持续考证、有更高的数据恢复服务水平、便利实现备份数据的容灾.
1、删除部份字段反复数据
先来谈谈若何查询反复的数据吧.
下面语句可以查询出那些数据是反复的:
select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1
将上面的>号改成=号便可以查询出没有反复的数据了.
想要删除这些反复的数据,可以利用下面语句举行删除
delete from 表名 a where 字段1,字段2 in
(select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1)
上面的语句非常简单,就是将查询到的数据删撤除.不过这种删除履行的效率非常低,关于大数据量来说,大概会将数据库吊死.所以我倡议先将查询到的反复的数据插入到一个暂时表中,然后对举行删除,这样,履行删除的时刻就不用再举行一次查询了.以下:
CREATE TABLE 暂时表 AS
(select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1)
上面这句话就是成立了暂时表,并将查询到的数据插入此中.
下面便可以举行这样的删除操作了:
delete from 表名 a where 字段1,字段2 in (select 字段1,字段2 from 暂时表);
这种先建暂时表再举行删除的操作要比直接用一条语句举行删除要高效得多.
这个时刻,大家大概会跳出来说,什么?你叫我们履行这种语句,那不是把全部反复的全都删除吗?而我们想保存反复数据中最新的一条记录啊!大家不要急,下面我就讲一下若何举行这种操作.
在oracle中,有个躲藏了自动rowid,里面给每条记录一个唯一的rowid,我们假如想保存最新的一条记录,
我们便可以操纵这个字段,保存反复数据中rowid最大的一条记录便可以了.
下面是查询反复数据的一个例子:
select a.rowid,a.* from 表名 a where a.rowid != ( select max(b.rowid) from 表名 b where a.字段1 = b.字段1 and a.字段2 = b.字段2 ) |
下面我就来说授一下,上面括号中的语句是查询出反复数据中rowid最大的一条记录.
而表面就是查询出除了rowid最大之外的其他反复的数据了.
由此,我们要删除反复数据,只保存最新的一条数据,便可以这样写了:
delete from 表名 a where a.rowid != ( select max(b.rowid) from 表名 b where a.字段1 = b.字段1 and a.字段2 = b.字段2 ) |
随便说一下,上面语句的履行效率是很低的,可以考虑成立暂时表,讲需求判断反复的字段、rowid插入暂时表中,然后删除的时刻在举行对比.
create table 暂时表 as select a.字段1,a.字段2,MAX(a.ROWID) dataid from 正式表 a GROUP BY a.字段1,a.字段2; delete from 表名 a where a.rowid != ( select b.dataid from 暂时表 b where a.字段1 = b.字段1 and a.字段2 = b.字段2 ); commit; |
以上是“Oracle数据库反复数据删除的三种情形-备份恢复[Oracle防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |