Oracle 为什么可以';我们不能使用ROWID作为主键吗?
据 您不应该将ROWID用作表的主键。如果你删除 并使用导入和导出实用程序重新插入一行,例如, 那么它的rowid可能会改变。如果删除一行,则Oracle可能会 将其rowid重新指定给稍后插入的新行 我不明白真正的原因。这是否意味着,当我们使用导入/导出实用程序时,只有我们不应该使用ROWID作为主键,或者我们永远不应该使用ROWID作为主键Oracle 为什么可以';我们不能使用ROWID作为主键吗?,oracle,primary-key,rowid,Oracle,Primary Key,Rowid,据 您不应该将ROWID用作表的主键。如果你删除 并使用导入和导出实用程序重新插入一行,例如, 那么它的rowid可能会改变。如果删除一行,则Oracle可能会 将其rowid重新指定给稍后插入的新行 我不明白真正的原因。这是否意味着,当我们使用导入/导出实用程序时,只有我们不应该使用ROWID作为主键,或者我们永远不应该使用ROWID作为主键 如上所述,当我们删除该行并重新插入时,相同的ROWID可能会被赋值,但在另一侧,该行已被删除,因此,如果我们获得相同的ROWID,则不会有任何问题。不是
如上所述,当我们删除该行并重新插入时,相同的ROWID可能会被赋值,但在另一侧,该行已被删除,因此,如果我们获得相同的ROWID,则不会有任何问题。不是吗?有人能用一些例子解释一下吗?如果重建表,那么表的ROWID可能会更改,并且您不想更改主键 此外,如果删除一条记录,则可以为新记录提供该ROWID。您还应该了解,ROWID不会在数据库导出和导入过程中持久化 从 如果移动了行,则ROWID将更改。行可以移动,因为 收缩和工作台移动等维护操作。因此, 长时间存储rowid是个坏主意。他们应该 只能在单个事务中使用,最好作为SELECT的一部分 ... 对于更新,行被锁定,阻止行移动
我们决不能将rowid用作永久性和重要业务数据的主键 ROWID是一行的技术地址。有几个场景是什么时候 a) 现有记录的rowid将被更改 b) 不同的记录将具有相同的rowid 例如,若您对表进行了分区,那个么更新记录的分区键将导致记录的rowid发生变化。这样的场景会阻止我们使用ROWID键,除非我们可以忘记它而不会造成严重后果
ROWID键可用于不必要的临时数据,如异常表,或用于短期导航,如在
WHERE CURRENT OF
子句中。在删除场景中,想象一下其他表中通过ROWID引用原始行的所有数据会发生什么情况。如果我们使用了级联删除
,那么?是的。或者,如果您在使用相同引用的另一个系统中有数据。导出/导入场景并不是导致rowid更改的唯一场景。表移动(“reorg”)也可以。不能使用rowid创建实际的主键(会得到“无效标识符”);所以我认为这意味着不这样对待is,假设它永远不会改变()。但显然,这只能发生在启用“启用行移动”的情况下。。。