我想知道,oracle中的ROWID是否增量生成? 如果我尝试下面的查询如何在内部生成oracle rowid?
select min(ROWID) from table
我总是会得到第一插入行的ROWID表或我可能最终得到任何随机行也的ROWID? 这将是非常有益的,如果有人可以请扔光
我想知道,oracle中的ROWID是否增量生成? 如果我尝试下面的查询如何在内部生成oracle rowid?
select min(ROWID) from table
我总是会得到第一插入行的ROWID表或我可能最终得到任何随机行也的ROWID? 这将是非常有益的,如果有人可以请扔光
min(ROWID)
将始终返回您表的第一行。
对于数据库中的每一行,ROWID伪列返回该行的 地址。 Oracle数据库ROWID值包含必要的信息 来定位行:
- 的对象的数据对象数
- 在其中行驻留在
- 的行的位置上的数据文件的数据块数据块(第一行是0)
- 的数据文件,其中所述行驻留(第一文件为1)。文件编号是相对于表空间的。
通常,一个rowid值唯一地标识数据库中的一行。 然而,在不同的表中的行的是一起存储在同一 集群中可以具有相同的rowid。
前往官方网站Here了解更多详情。
“最小”rowid将可能不是始终提供表中的第一个插入的行。从the documentation引用:
将rowid分配给某个行块后,rowid可以在特殊情况下更改。例如,如果启用了行移动,那么由于分区键更新,闪回表操作,收缩表操作等,rowid可能会更改。如果行移动被禁用,那么如果使用Oracle数据库实用程序导出和导入该行,rowid可能会更改。
“依此类推”表示有很多原因会导致rowid改变。这可以很容易地与一个小例子证明:
create table tmp_test (a number);
insert into tmp_test values (1);
select rowid, a from tmp_test;
ROWID A
------------------ ----------
AABo3AAFvAAAda6AAA 1
alter table tmp_test move;
select rowid, a from tmp_test;
ROWID A
------------------ ----------
AABo3BAFvAAAdbjAAA 1
你会发现,一个alter table
操作之后的唯一ROWID发生了变化。
如果rowid可以改变和甲骨文没有明确保证“最低”的rowid永远是第一个插排,你应该有这样的跟踪,如果需要的另一种方式。时间戳或递增序列是正常的。
它必须找到第一个插入的行不参考任何数据非常不寻常的要求。如果这是你使用的是为什么你需要做的这一点,我会再看看考虑。