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保留最大或者最小的。

oracle中的rowid--伪列-删除表中的重复内容-实用的更多相关文章

  1. Oracle中增加,修改,删除表中的列

    有些时候,当一个表已经建好,并且已经使用后,发现需要对表结构进行修改,这个时候就要对表中的列进行增删查改操作. 为表增加新列: ALTER TABLE table_name ADD ( column_ ...

  2. ROWID面试题-删除表中重复数据(重复数据保留一个)

    /* ROWID是行ID,通过它一定可以定位到r任意一行的数据记录 ROWID DNAME DEPTNO LOC ------------------ ------------------------ ...

  3. 通过删除hbase表中的region来达到删除表中数据

    公司最近在搞一个hbase删除数据,由于在建表的时候是通过region来对每日的数据进行存储的,所以要求在删除的时候直接通过删除region的来删除数据(最好的方案是只删除region中的数据,不把r ...

  4. rownum和rowid伪列

    select row employee_id,last name,salary from employees; select row employee_id,last name,salary from ...

  5. Oracle中ROWNUM伪列和ROWID伪列的用法与区别

    做过Oracle分页的人都知道由于Oracle中没有像MySql中limit函数以及SQLServer中的top关键字等,所以只能通过伪列的方式去满足分页功能,在此,不谈分页方法,只从根本上去介绍这两 ...

  6. Oracle、SQLServer 删除表中的重复数据,只保留一条记录

    原文地址: https://blog.csdn.net/yangwenxue_admin/article/details/51742426 https://www.cnblogs.com/spring ...

  7. Oracle删除表中的重复数据

    Oracle数据库删除表中的重复数据,只保留其中的一条,以两个字段为例,提供两种方法 ①.直接delete重复的数据 delete from table_name t1 where (t1.col1, ...

  8. Sybase:删除表中的某列

    Sybases:删除表中的某列 alter table tb1(表名) drop clo1(列名); commit;

  9. ROWID伪列

    ROWID伪列概念: 在数据表中每一行所保存的记录,oracle会为每条记录分配一个唯一的地址编号,这个编号就是通过ROWID表示的. 所有的数据都利用ROWID进行定位. 观察rowid的存在 SQ ...

随机推荐

  1. 【COCOS2DX-对28游戏开发】 Cocos2d-x-3c 道路设计 CocosBase CocosNet CocosWidget

    原文链接:http://blog.csdn.net/cocosviva/article/details/18970717 另一个比較不错的cocos2dx扩展库:https://github.com/ ...

  2. android——混淆打包

    网上搜了一大堆,在此不一一赘诉. 直接讲解了 如上图这么配置,其实就是加上一句话而已.告诉打包工具混淆打包的代码放在./proguard-project.txt这里 proguard.config=. ...

  3. js Range

    http://www.zhangxinxu.com/wordpress/2011/04/js-range-html%E6%96%87%E6%A1%A3%E6%96%87%E5%AD%97%E5%86% ...

  4. 提示框的优化之自定义Toast组件之(三)Toast组件优化

    开发步骤: 在toast_customer.xml文件中添加一个图片组件对象显示提示图片 <?xml version="1.0" encoding="utf-8&q ...

  5. SQL server sysobjects表说明

    sysobjects 表 在数据库内创建的每个对象(约束.默认值.日志.规则.存储过程等)在表中占一行.只有在 tempdb 内,每个临时对象才在该表中占一行. sysobjects 表结构: 列名 ...

  6. 1218.2——property关键字

    由于我们定义的成员变量是私有的,所有外部是无法访问的,为了能够访问我们写set和get方法 但是由于代码量过于复杂冗长,引入了@property (声明)和 @synthesize(实现) 后来又简化 ...

  7. 解决iOS9苹果将原http协议改成了https协议问题

    解决方法: 在info.plist 加入key <key>NSAppTransportSecurity</key> <dict> <key>NSAllo ...

  8. 轻量级jquery框架之--树(tree)

    前言 在常用的UI组件中,树形组件与数据列表组件可以说是构成一个管理平台基本的两大数据核心组件.树形组件用于系统菜单,数据列表用于数据表现,两者配合即可完成一个简单的数据系统.要实现一个支持复选.工具 ...

  9. 读php手册一点点心得(1)

    1.   要输出大段文本时,跳出PHP解析模式通常比将文本通过echo或print输出更有效率(手册) 2.   note :为了代码的发行及一致性,确保不要使用短标记,短标记仅通过php.ini配置 ...

  10. R语言数据合并使用merge数据追加使用rbind和cbind

    R语言中的横向数据合并merge及纵向数据合并rbind的使用 我们经常会遇到两个数据框拥有相同的时间或观测值,但这些列却不尽相同.处理的办法就是使用merge(x, y ,by.x = ,by.y ...