rowid概述

rowid是一个用来唯一标记表中行的伪列。它是物理表中行数据的内部地址,包含两个地址,其一为指向数据表中包含该行的块所存放数据文件的地址,另一个是可以直接定位到数据行自身的这一行在数据块中的地址。

除了在同一聚簇中可能不唯一外,每条记录的rowid是唯一的。可以理解成rowid就是唯一的。

扩展ROWID

从Oracle 8i开始使用扩展rowid标识行物理地址

扩展rowid使用base64编码行的物理地址,编码字符包含A-Z, a-z, 0-9, +, 和/。

扩展rowid由四部分组成:OOOOOOOFFFBBBBBBRRR:

rowid包含如下内容:

①:对象所在的数据文件号

②:对象所在的块号

③:对象所在行在块内的位置

④:对象号

其中:

  • OOOOOO:数据对象编号(6位显示)
  • FFF:相关数据文件编号(3位显示)
  • BBBBBB:数据块编号(6位显示)
  • RRR:数据块中行编号(3位显示)

Oracle正是根据这些内容找到相应的数据的。

查询到的rowid示例

SELECT ROWID FROM T_EMP ORDER BY ROWID

 ROWID的使用——快速删除重复的记录

ROWID是数据的详细地址,通过rowid,oracle可以快速的定位某行具体的数据的位置。

ROWID可以分为物理rowid和逻辑rowid两种。普通的表中的rowid是物理rowid,索引组织表(IOT)的rowid是逻辑rowid。

当表中有大量重复数据时,可以使用ROWID快速删除重复的记录。

举例:

--建表tbl

SQL> create table stu(no number,name varchar2(10),sex char(2));

--添加测试记录

SQL> insert into stu values(1, 'ab',’男’);

SQL> insert into stu values(1, 'bb',’女’);

SQL> insert into stu values(1, 'ab',’男’);

SQL> insert into stu values(1, 'ab',’男’);

SQL>commit;

删除重复记录方法很多,列出两种。

⑴ 通过创建临时表

可以把数据先导入到一个临时表中,然后删除原表的数据,再把数据导回原表,SQL语句如下:

SQL>create table stu_tmp as select distinct* from stu;

SQL>truncate table sut;                                                   //清空表记录

SQL>insert into stu select * from stu_tmp;                        //将临时表中的数据添加回原表

这种方法可以实现需求,但是很明显,对于一个千万级记录的表,这种方法很慢,在生产系统中,这会给系统带来很大的开销,不可行。

⑵ 利用rowid结合max或min函数

使用rowid快速唯一确定重复行结合max或min函数来实现删除重复行。

SQL>delete from stu a where rowid not in (select max(b.rowid) from stu b where a.no=b.no and a.name = b.name and a.sex =b.sex);                                          //这里max使用min也可以

或者用下面的语句

SQL>delete from stu a where rowid < (select max(b.rowid) from stu b where a.no=b.no and a.name = b.name and a.sex = b.sex);

//这里如果把max换成min的话,前面的where子句中需要把"<"改为">"

跟上面的方法思路基本是一样的,不过使用了group by,减少了显性的比较条件,提高效率。

SQL>delete from stu where rowid not in (select max(rowid) from stu t group by t.no, t.name, t.sex );

思考:若在stu表中唯一确定任意一行数据(1, 'ab',’男’),把sex字段更新为”女”,怎么做?

SQL>update stu set sex=’女’ where rowid=(select min(rowid) from stu where no=1 and name=’ab’ and sex=’男’);

我的理解:当想要得到唯一值的时候就可以考虑使用rowid来进行处理

oracle中rowid的用法相关推荐

  1. Oracle中rowid的用法(全面)

    ROWID是数据的详细地址,通过rowid,Oracle可以快速的定位某行具体的数据的位置. ROWID可以分为物理rowid和逻辑rowid两种.普通的堆表中的rowid是物理rowid,索引组织表 ...

  2. oracle rowid 优先级,Oracle中rowid的用法(全面)

    ROWID是数据的详细地址,通过rowid,Oracle可以快速的定位某行具体的数据的位置. ROWID可以分为物理rowid和逻辑rowid两种.普通的堆表中的rowid是物理rowid,索引组织表 ...

  3. oracle rowID切片,Oracle中rowid的用法

    ROWID是数据的详细地址,通过rowid,可以快速的定位某行具体的数据的位置. ROWID可以分为物理rowid和逻辑rowid两种.普通的堆表中的rowid是物理rowid,索引组织表(IOT)的 ...

  4. oracle 切割 rowid,Oracle中rowid的用法(全面)

    ROWID是数据的详细地址,通过rowid,Oracle可以快速的定位某行具体的数据的位置. ROWID可以分为物理rowid和逻辑rowid两种.普通的堆表中的rowid是物理rowid,索引组织表 ...

  5. oracle中rowid列,Oracle中的rowid

    ROWID是ORACLE中的一个重要的概念.用于定位数据库中一条记录的一个相对唯一地址值.通常情况下,该值在该行数据插入到数据库表时即被确定且唯一.ROWID它是一个伪列,它并不实际存在于表中.它是O ...

  6. oracle中类似indexof用法_instr函数

    oracle中类似indexof用法_instr函数 [sql] 在oracle中没有indexof()函数 但是提供了一个 instr() 方法 具体用法: select instr('保定市南市区 ...

  7. Oracle中group by用法

    Oracle中group by用法 在select 语句中可以使用group by 子句将行划分成较小的组,一旦使用分组后select操作的对象变为各个分组后的数据,使用聚组函数返回的是每一个组的汇总 ...

  8. oracle 的wecate函数,1.Oracle中decode()函数用法

    1.Oracle中decode函数用法 含义解释: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下: IF 条件=值1 THEN RETURN(翻 ...

  9. oracle中col 的用法,Oracle中的SUM用法讲解,

    Oracle中的SUM用法讲解, Oracle中的SUM条件查询 1.按照区域编码分组查询区域编码.IPTV_NBR不为空的数量.ACC_NBR不为空的数量.所有用户数量 SELECT AREA_CO ...

最新文章

  1. 【数学专题】 筛质数、分解质因数和快速幂
  2. 使用Axis开发Web Service程序
  3. cath数据库fasta备注_数据库(同源)搜索软件 FASTA 和 BLAST
  4. Ubuntu 下 redmine 安装配置
  5. YOLO学习-1:win10(64位)+ python3.6 + TensorFlow + keras + yolov3测试实践
  6. QT的QAxFactory类的使用
  7. outlook附件大小限制_如何在Outlook中调整大图片附件的大小
  8. 天龙2 场景地图人物 方向箭头 方法
  9. pandas之DataFrame合并merge
  10. Nginx模块开发—Nginx代码规范
  11. cefSharp 开发随笔
  12. Maven Oracle JDBC
  13. php中的条件语句,PHP中的条件语句和示例
  14. IO流的知识点总结归纳
  15. iOS 13 SceneDelegate适配
  16. web3调用智能合约取事件
  17. 直方图中bin的说明
  18. 黑盒子法探索人脑逻辑模型备忘录
  19. 如何把Pod本地化(Localize)
  20. 12306 抢票 python + selenium + chrome (二) 基础准备的软件和材料

热门文章

  1. 跨时钟域(CDC)设计方法之多bit信号篇(一)
  2. 流程图用什么软件画?这三款工具很实用
  3. ADB命令自动刷抖音
  4. C++核心编程<类和对象>(4)
  5. CSS3: 线性渐变用法详解
  6. 几个骚操作,让代码自动学会画画,太好玩啦!
  7. 应用性能监控(APM)
  8. 计算机系统为什么不是中文,电脑打字打不出中文怎么回事
  9. 我对移动端适配的了解
  10. 实习面试----苏州意能通一面面试