Rowid和Rownum的区别

Rowid和Rownum对于数据库开发人员来说基本很少用到,因为在企业数据库开发中大多都是进行数据批处理,但是对于其他数据库人员来说还是会用到的。
rowid和rownum都是虚列,但含义完全不同。rowid是物理地址,用于定位oracle中具体数据的物理存储位置,而rownum则是sql的输出结果排序。通俗的讲:rowid是相对不变的,rownum会变化,尤其是使用order by的时候。

 

rowid      用于定位数据表中某条数据的位置,是唯一的、也不会改变 

  

rownum      表示查询某条记录在整个结果集中的位置, 同一条记录查询条件不同对应的 rownum   是不同的而 rowid   是不会变的 

    

例如有如下一张表 :USER    

 

name

age

张三

20

李四

22

王五

23

 

 
 

当执行查询 : select   rowid ,rownum ,name,age   from USER order by age  asc   时结果如下:  

 

rowid

rownum

name

age

AAAOWhAAQAAALgdAAa

1

张三

20

AAAOWhAATAAALp7AAd

2

李四

22

AAAOWhAATAAALp7AAe

3

王五

23

 

    

当执行查询 : select   rowid ,rownum ,name,age   from USER order by age  desc   时结果如下:  

 

rowid

rownum

name

age

AAAOWhAATAAALp7AAe

1

王五

23

AAAOWhAATAAALp7AAd

2

李四

22

AAAOWhAAQAAALgdAAa

3

张三

21

 

 

ROWID: 
1、为什么使用ROWID
    

ORACLE把ROWID作为B-树和其内部算法标示ROW的唯一标示。在ORACLE8以前的版本中,ROWID标示FILE、BLOCK,ROW NUMBER,只用一个数字代表FILE号。

在ORACLE8中,一个DATAFILE有两个数字代表:

1.)一个绝对值,是整个数据库唯一的。可以看DBA_DATA_FILES中的FILE_ID。

  1. SQL> SELECT FILE_ID FROM DBA_DATA_FILES;  
  2.    FILE_ID  
  3. ----------  
  4.          4  
  5.          3  
  6.          2  
  7.          1  

   

2.)一个相对值,在TABLESPACE中是唯一的,可以看DBA_DATA_FILES中的RELATIVE_FNO。

  1. SQL> SELECT RELATIVE_FNO FROM DBA_DATA_FILES;  
  2. RELATIVE_FNO  
  3. ------------  
  4.            4  
  5.            3  
  6.            2  
  7.            1  

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值