【发布时间】:2015-04-21 11:42:20
【问题描述】:
您不应使用 ROWID 作为表的主键。如果你删除 并使用导入和导出实用程序重新插入一行,例如, 那么它的rowid可能会改变。如果你删除一行,那么 Oracle 可能 将其 rowid 重新分配给稍后插入的新行。
我不明白真正的原因。这是否意味着,当我们使用 Import/Export 实用程序时,只有我们不应该使用 ROWID 作为主键,或者我们永远不应该使用 ROWID 作为主键?
如上所述,当我们删除该行并重新插入时,可能会分配相同的 ROWID,但在另一侧该行已被删除,因此如果我们获得相同的 ROWID 不会有任何问题。不是吗?谁能举个例子来解释一下?
【问题讨论】:
-
在删除场景中,想象一下其他表中通过其rowid引用原始行的所有数据会发生什么。
-
如果我们使用了
cascade delete那么? -
是的。或者,如果您在另一个使用相同引用的系统中有数据。并且导出/导入场景并不是唯一导致 rowid 更改的场景。表格移动(“重组”)也可以。
-
你不能使用rowid创建一个实际的主键(你会得到'invalid identifier');所以我认为这意味着不要这样对待,假设它永远不会改变(since it can)。
标签: oracle primary-key rowid