请问oracle的行标识符rowid与行号rownum有什么区别?

2024-11-19 00:47:52
推荐回答(4个)
回答1:

rowid: 表示了记录的物理地址(不一定是连续的) 是唯一存在的
rownum:表示了记录的行号(是连续的)

两者没有必然的联系,所以rowid排在前面的行,rownum不一定排在前面。

回答2:

rowid的组成是这样
SQL> select rowid from rowid_example;

ROWID
------------------
AAANdqAABAAAPFyAAA

其中,
AAANdq AAB AAAPFy AAA

Data Object ID Relative File No Block Number Row Number(Slot)

也就是由对象id,相关的文件id,块号,行号共同构成了唯一的一行的定位符。类似于物理地址

rownum则是逻辑上的。查询结果的顺序号。比如

SQL> select rowid,rownum from a;

ROWID ROWNUM
------------------ ----------
AAAP9VAAEAAAK4nAAA 1
AAAP9VAAEAAAK4nAAB 2
AAAP9VAAEAAAK4nAAC 3
AAAP9VAAEAAAK4nAAD 4
AAAP9VAAEAAAK4nAAE 5
AAAP9VAAEAAAK4nAAF 6
AAAP9VAAEAAAK4nAAG 7
AAAP9VAAEAAAK4nAAH 8

8 rows selected.
前面的ROWID是查询出来的该行记录的唯一地址,后面的rownum则是此次查询结果的序号。

回答3:

rowid是物理行号,rownum是逻辑行号,且只能从1开始,rownum直接使用(不考虑子查询)时候只能这样使用:select * from tablename where rownum<7 不能用大于或等于1以上的数字

回答4:

ROWID 是全库唯一的 对应 对象号,文件号,块号 ,行号 准确找到物理位置
ROWNUM只是表中的行号 1,2,3,4,5........ 比如你想SELECT * FROM t WHERE rownum <4
就是限制返回行数,