RowId
当一个用户向oracle数据库中插入1行数据的时候,oracle会自动的在这一行数据上加一个ROWID。在一个库中每一行数据都有唯一一个ROWID,Oracle系统内部就是利用RowId来定位数据的。
一些重要信息:
- 唯一性:每个数据库表的每一行都有一个唯一的 ROWID 值。即使表中存在相同的数据,它们的 ROWID 也会是不同的。
- 物理存储位置:ROWID 可以直接指向数据库表中的物理存储位置。它包含了有关数据文件、数据块和行的信息,可以用于快速定位和访问特定行的数据。
- ROWID 格式:ROWID 由两部分组成,前半部分表示数据文件和数据块的标识,后半部分表示行在数据块中的位置。
- 使用 ROWID:ROWID 可以在查询操作中使用,以定位和检索特定的行。可以通过 WHERE 子句或 ROWID 伪列来引用 ROWID 值。
扩展性rowid
改进的 ROWID 格式,用于在分区表和分布式数据库环境中唯一标识行。
扩展性 ROWID 包含以下几个组成部分:
- 数据对象标识符(Data Object Identifier,DOBJ):用于标识对象所在的数据库和表空间。
- 目标文件标识符(Relative File Number,RFN):用于标识对象所在的数据文件。
- 数据块标识符(Block ID,Block ID):用于标识对象所在的数据块。
- 行标识符(Row ID,Row ID):用于标识对象所在的行。
示例:AAAS4zAAEAAAAAWAAB
这个扩展性 ROWID 包含了几个部分:
- 数据对象标识符(Data Object Identifier,DOBJ):AAA,用于标识对象所在的数据库和表空间。32位(bits)
- 目标文件标识符(Relative File Number,RFN):S4,用于标识对象所在的数据文件。10位
- 数据块标识符(Block ID,Block ID):z,用于标识对象所在的数据块。22位
- 行标识符(Row ID,Row ID):AAEAAAAAWAAB,用于标识对象所在的行。16位
加起来共10位,或者10个字节。
限制性rowId
在oracle7或者之前使用的。仅仅使用6个字节,故没有对象号的。
所以在7之前(包括7)数据文件个数不超过1022.
然后在8或之后数据库的表空间不能超过1022个。
sql查询
:SELECT ROWID, * FROM employees;
ROWID | EMPLOYEE_ID | FIRST_NAME | LAST_NAME | … |
---|---|---|---|---|
AAARvzAAEAAAAaFAAA | 1001 | John | Doe | … |
AAARvzAAEAAAAaFAAB | 1002 | Jane | Smith | … |
AAARvzAAEAAAAaFAAC | 1003 | David | Johnson | … |
… |
可以把表中的rowid解析, 然后对照着rowid 的组成填充一下各个属性。