您不应该使用ROWID作为表的主键。如果你删除 并使用导入和导出实用程序重新插入一行,例如, 然后它的rowid可能会改变。如果删除一行,那么Oracle可能会 将其rowid重新分配给稍后插入的新行。
我不明白实际的原因。这是否意味着,当我们使用导入/导出实用程序时,只有我们不应该使用ROWID作为主键,或者我们不应该使用ROWID作为主键?
如上所述,当我们删除行并重新插入时,相同的ROWID可能会被分配,但另一方面该行已被删除,因此如果我们获得相同的ROWID则不会有任何问题。不是吗?有人可以用一些例子来解释这个吗?
答案 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
子句。