为什么我们不能使用ROWID作为主键?

时间:2015-04-21 11:42:20

标签: oracle primary-key rowid

根据Oracle Documentation

  

您不应该使用ROWID作为表的主键。如果你删除   并使用导入和导出实用程序重新插入一行,例如,   然后它的rowid可能会改变。如果删除一行,那么Oracle可能会   将其rowid重新分配给稍后插入的新行。

我不明白实际的原因。这是否意味着,当我们使用导入/导出实用程序时,只有我们不应该使用ROWID作为主键,或者我们不应该使用ROWID作为主键?

如上所述,当我们删除行并重新插入时,相同的ROWID可能会被分配,但另一方面该行已被删除,因此如果我们获得相同的ROWID则不会有任何问题。不是吗?有人可以用一些例子来解释这个吗?

2 个答案:

答案 0 :(得分:1)

如果您重建表格,那么表格的ROWID可能会发生变化,您不希望更改主键。

此外,如果删除一条记录,则可以为ROWID指定新记录。此外,您应该了解ROWID不会在数据库EXPORT和IMPORT过程中持续存在。

来自here

  

如果移动行,则ROWID将更改。行可以移动   维护操作,如收缩和工作台移动。结果是,   长时间存储ROWID是个坏主意。他们应该   仅用于单个事务,最好作为SELECT的一部分   ... FOR UPDATE,行被锁定,阻止行移动。

答案 1 :(得分:0)

我们绝不应该使用ROWID作为永久和业务重要数据的主键。

ROWID是一行的技术地址。

时有几种情感

a)现有记录的rowid将被更改

b)不同的记录会有相同的rowid。

例如,如果您有分区表,更新记录的分区键会使我们进入记录的rowid更改。除非我们能够忘记它而不会产生严重后果,否则这种情况会阻止使用ROWID键。

ROWID键可用于不必要的临时数据,例如异常表,或用于短期导航,例如WHERE CURRENT OF子句。