【发布时间】:2011-09-20 23:08:24
【问题描述】:
Oracle ROWID 是said 在表中是唯一的。我不明白存储在同一个集群中的两个不同表的两行如何具有相同的rowid,因为ROWID format的最后三个字符表示数据库块中的行号?
我知道聚簇表中的行保存在同一个数据库块中,但由于 ROWID 包含行号,不应该区分数据库块中的两行吗?
【问题讨论】:
Oracle ROWID 是said 在表中是唯一的。我不明白存储在同一个集群中的两个不同表的两行如何具有相同的rowid,因为ROWID format的最后三个字符表示数据库块中的行号?
我知道聚簇表中的行保存在同一个数据库块中,但由于 ROWID 包含行号,不应该区分数据库块中的两行吗?
【问题讨论】:
很简单。因为聚簇表的“友好”行一起存储在块中,这意味着您可以拥有相同的 rowid。
在下图中(来自frontiernet),第一个部门行的行号为 1,第一个 emp 行的行号为 1。这是第一次出现。
在此之后,我们有 emp 2, emp 3... 在此部门中的所有 emp 之后,如果有足够的空间,则您有第二行用于部门,但在上一个部门中遇到了 emp 2 的 rowid。
等等。
发生这种情况是因为 rowid 中的行号与其表和当前块相关。
【讨论】:
通常,rowid 值唯一标识数据库中的一行。但是,在同一个簇中存储在一起的不同表中的行可以具有相同的 rowid。
结帐:http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/pseudocolumns008.htm
【讨论】: