博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle中的rowid--伪列-删除表中的重复内容-实用
阅读量:7193 次
发布时间:2019-06-29

本文共 1578 字,大约阅读时间需要 5 分钟。

1、rowid是一个伪列,是用来确保表中行的唯一性,它并不能指示出行的物理位置,但可以用来定位行。
2、rowid是存储在索引中的一组既定的值(当行确定后)。我们可以像表中普通的列一样将它选出来。
3、利用rowid是访问表中一行的最快方式。
4、rowid需要10个字节来存储,显示为18位的字符串。
rowid的组成结构为: 
data object number(6位字符串) relative file number(3位字符串) block number(6位字符串) row number(3位字符串),如:AAANS3AABAAAPPqAAA
5、我们可以借助oracle提供的包dbms_rowid,来对rowid进行解析从而获取关于行的相关信息:
SQL>select
2 rowid, 
3 dbms_rowid.rowid_object(rowid) obj_id, 
4 dbms_rowid.rowid_relative_fno(rowid) df#, 
5 dbms_rowid.rowid_block_number(rowid) blknum, 
6 dbms_rowid.rowid_row_number(rowid) rowno 
7 from t;
一般来说,当表中的行确定后,rowid就不会发生变化。
但当如下情况发生时,rowid将发生改变: 
1、对一个表做表空间的移动后 
2、对一个表进行了EXP/IMP
rowid的实际应用
在Oracle中如何利用Rowid查找和删除表中的重复记录
现看看我的一个简单表的内容:
如果我利用命令:delete from t2 where a='zongjun';的话,两行内容将全部删掉,而我想删掉其中的一行内容呢?
查看表的rowid:
利用不同的rowid删除指定的行:
这样我们就删掉了重复的内容,请记住rowid是完全不一样的。
但是这样只能适合数据少的表,但是在大型的数据库当中,一个表可能有上千万行的内容,因此我们不可能一条一条的去查找并且删除。我们可以利用min(rowid)或max(rowid)来保留一条重复的内容,删除其余所有的重复内容;如下表
SQL> select * from tt;
        ID NAME
---------- --------
         1  zzj
         2  wang
         3  li
         1  zzj
         1  zzj
         1  zzj
         1  zzj
         1  gang
         1  gang
以上有很多内容是相同的,现在要删除完全一样的内容,各自保留一行即可:
SQL> delete from tt where tt.rowid not in (select min(rowid) from tt group by id,name);
5 rows deleted.
SQL> select * from tt;
        ID NAME
---------- --------
         1 zzj
         2 wang
         3 li
         1 gang
5行已被删除,但是现在还有id一样的行,要保留一行,如下
SQL> delete from tt where tt.rowid not in (select min(rowid) from tt group by id);
1 row deleted.
SQL> select * from tt;
        ID NAME
---------- --------
         1 zzj
         2 wang
         3 li
其中的min(rowid)可以换成max(rowid),这样将会保留最大的rowid,而删除其他的。这里只能利用函数min和max保留最大或者最小的。
 
本文转自 zhangzj1030 51CTO博客,原文链接:http://blog.51cto.com/tech110/168025

转载地址:http://zpxkm.baihongyu.com/

你可能感兴趣的文章
【云栖大会】AliOS Things宣布开源,支持物联网设备快速上云
查看>>
二季度互联网发展报告:全球平均连接速度同比提升14%
查看>>
Windows 10周年更新:中国区3日凌晨2点推送
查看>>
mysql分区之range分区
查看>>
[Android学习笔记七] 设备管理服务示例开发
查看>>
mysql status 详细解释
查看>>
一次线上问题排查所引发的思考
查看>>
无需过分关注Created_tmp_disk_tables
查看>>
px与rem关系及转换
查看>>
硬驱丢失
查看>>
数据库事务处理差异:可提交读和重复读区别
查看>>
与大师Jack Jarkv的交流分享后的思考
查看>>
Sql 的 RAISERROR用法
查看>>
Css下拉菜单设置
查看>>
Robot Framework学习笔记(八)------ride标签使用
查看>>
一款简洁而强大的前端框架—JQuery
查看>>
js中的解绑事件
查看>>
ubuntu16.04下编译安装vim8.1
查看>>
DSSM 深度学习解决 NLP 问题:语义相似度计算
查看>>
真实世界的脉络].(英)戴维.多伊奇.pdf
查看>>