Rowid和Rownum的区别

来源:互联网 发布:2017最新网络推广渠道 编辑:程序博客网 时间:2024/05/16 17:25

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。

[java] view plain copy print?
  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。

[java] view plain copy print?
  1. SQL> SELECT RELATIVE_FNO FROM DBA_DATA_FILES;  
  2. RELATIVE_FNO  
  3. ------------  
  4.            4  
  5.            3  
  6.            2  
  7.            1  

 

 

0 0
原创粉丝点击