oracle中的rowID

简介: oracle数据库的表中的每一行数据都有一个唯一的标识符,或者称为rowid,在oracle内部通常就是使用它来访问数据的。rowid需要 10个字节的存储空间,并用18个字符来显示。该值表明了该行在oracle数据库中的物理具体位置。

oracle数据库的表中的每一行数据都有一个唯一的标识符,或者称为rowid,在oracle内部通常就是使用它来访问数据的。rowid需要 10个字节的存储空间,并用18个字符来显示。该值表明了该行在oracle数据库中的物理具体位置。可以在一个查询中使用rowid来表明查询结果中包含该值。

保存rowid需要10个字节或者是80个位二进制位。这80个二进制位分别是:

1. 数据对象编号,表明此行所属的数据库对象的编号,每个数据对象在数据库建立的时候都被唯一分配一个编号,并且此编号唯

一。数据对象编号占用大约32位。
2. 对应文件编号,表明该行所在文件的编号,表空间的每一个文件标号都是唯一的。文件编号所占用的位置是10位。
3. 块编号,表明改行所在文件的块的位置块编号需要22位。
4. 行编号,表明该行在行目录中的具体位置行编号需要16位。

这样加起来就是80位。

rowid使用64为的编码方案来显示,使用了‘A-Z’,’a-z’,'0-9′和’/'来表示。

例如:
select rowid,empid from scott.emp;
将会得到结果:
SQL> select rowid,empno from scott.emp;

ROWID EMPNO
—————— ———-
AAAHW7AABAAAMUiAAA 7369
AAAHW7AABAAAMUiAAB 7499
AAAHW7AABAAAMUiAAC 7521
AAAHW7AABAAAMUiAAD 7566
AAAHW7AABAAAMUiAAF 7698
AAAHW7AABAAAMUiAAG 7782
AAAHW7AABAAAMUiAAH 7788
AAAHW7AABAAAMUiAAI 7839
AAAHW7AABAAAMUiAAJ 7844
AAAHW7AABAAAMUiAAK 7876
AAAHW7AABAAAMUiAAL 7900
AAAHW7AABAAAMUiAAM 7902
AAAHW7AABAAAMUiAAN 7934

这里的AAAHW7是数据库对象编号,AAB是文件标号,AAAMU是块编号,最后四位(empno = 7369时为iAAA)是行编号。

使用describle(或简写为desc)命令查看表结构时,输出结果中是不能看到rowid这里一列的,这是因为这一列只在数据库内部使用,

row通常被称为一个伪列。

在某些oracle数据库操作的IDE(例如golden)中使用这些工具自带的数据编辑功能时,必须指定rowid列才能完成,例如如果想选择

scott.emp的数据后进行手工修改,则必须使用
select rowid,t.* from scott.emp t;
而不能直接写成
select * from emp;

目录
相关文章
|
8月前
|
分布式计算 Oracle 关系型数据库
在Flink中使用CDC同步Oracle中的RowID
在Flink中使用CDC同步Oracle中的RowID
409 1
|
SQL Oracle 关系型数据库
|
Oracle 关系型数据库 数据库
|
SQL Oracle 关系型数据库
|
SQL Oracle 关系型数据库
Oracle中的ROWID实现(r10笔记第95天)
一直以来,Oracle的发展是如火如荼,依然非常成熟,无论是行业的人员和资料的丰富程度。对于数据库的体系结构的内容,下面这张图我估计很多DBA都快看吐了,每次一提起体系结构,总是会看到这张图。
1022 0
|
SQL Oracle 关系型数据库
spool命令、创建一个表,创建并且copy表,查看别的用户下的表,rowid行地址 索引的时候使用,表的增删改查,删除表,oracle的回收站
  1、spool命令 spool "D:\test.txt" spool off SQL> host cls 2、创建一个表 SQL> --条件(1):有创建表的权限,(2):有表空间 SQL> desc t4;  名称                                      是否为空? 类型
1494 0
|
Oracle 关系型数据库 MySQL
mysql中实现行号,oracle中的rowid
mysql中实现行号需要用到MYSQL的变量,因为MySql木有rownumber。   MYSQL中变量定义可以用 set @var=0 或 set @var:=0   可以用=或:=都可以,但是如果变量用在其他语句中,如:select那么必须用:=,因为=会被当作一个比较符号   1 select @rownum:=@rownum+1 as rownum, b.* from (select @rownum:=0) a, b   这个很有用哦,比如要取到排名好多的。
1635 0