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来进行处理

转载于:https://www.cnblogs.com/xzdblogs/p/6495755.html

ORACLE中的rowid用法相关推荐

  1. oracle中rowid列,Oracle中的rowid

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

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

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

  3. Oracle中group by用法

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

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

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

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

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

  6. oracle多表groupby,Oracle中group by用法

    Oracle中group by用法 在带有group by 子句的查询语句中,在select 列表中指定的列要么是group by 子句中指定的列,要么包含聚组函数 简单用法 select max(s ...

  7. oracle+decode函数用法,oracle中decode函数用法

    oracle中decode函数用法以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! DECODE函数相当于一条件语句(IF ...

  8. 【软件测试】Oracle中的rownum用法

    一.对rownum的说明 查看全文 http://www.taodudu.cc/news/show-3538609.html 相关文章: Oracle rownum 用法 Oracle rownum ...

  9. oracle union详解,oracle union用法 oracle中union的用法

    oracle中union的用法 只知道是用来左联接的,还有类似union all,谁有这个例子,要解释详细一点的一生中要有两次冲动,一次奋不顾身的爱情,一次为说走就走的旅行. UNION 指令的目的是 ...

最新文章

  1. Java社区领袖介绍平台支持选项
  2. 如何调试分析Android中发生的tombstone
  3. python学习(操作列表、if语句)
  4. 有关volatile unsigned long一些说明
  5. windows下实现自己的第一个python脚本文件并.exe运行
  6. Spring异步调用原理及SpringAop拦截器链原理
  7. python基础-字典的增删改查
  8. 【uTenux实验】写在开始实验之前
  9. JSP→基本语法/静态内容/指令/动作/表达式/小脚本(Scriptlet)/声明/注释、JSP页面声明周期、代码样例、九大隐式内置对象及方法代码样例
  10. 课程管理系统(面向对象python)
  11. 知识图谱基础入门(二)
  12. wifi免密码登录认证流程
  13. urlrewrite配置
  14. nbu里oracle备份al开头的,认识NBU备份Oracle时Code 29错误
  15. 4.8 putsgets函数
  16. 公积金总结(一)--公积金概念
  17. Android 11.0 12.0TvSettings系统设置遥控器home键退不出主页面功能的修复
  18. window10桌面管理器占内存太高解决办法
  19. Java培训出身,今获阿里Android岗offer,大专学渣的“登天”之路!
  20. ASP.NET---八大子句

热门文章

  1. 常用浏览器的强制刷新快捷键
  2. Adobe新的AI产品开放公测!Firefly带来全新的制图体验,让你效率翻倍!
  3. 三大家族scroll、offset、client
  4. 气体动理论的相关概念
  5. React高阶组件(HOC)的写法归纳
  6. DFS之最大人工岛(填海造陆) 827.
  7. openCV--cvCvtColor函数
  8. MicroApp搭建样例(一)
  9. Java通过JDBC连接MySQL
  10. 让早餐,更新鲜,只要一瓶零度果坊早橙好NFC果汁