主键序列的问题

时间:2015-05-03 18:20:52

标签: oracle sequence oracleforms

向表单添加新数据时,我的主键序列增加1。 但是,如果我要删除数据并将其替换为新数据,则序列将继续执行。

因此,例如我的数据主键是1,2,3,4,5,6,10,因为先前删除了行。

我希望这样做。

2 个答案:

答案 0 :(得分:2)

Oracle中的

var notification = new Notification(); notification.ShowInTaskbar = false; notification.Show(); 值保证唯一,但您不能指望这些值形成连续的序列而没有任何间隙。

即使您永远不会从表中删除任何行,您也可能会在某些时候看到间隙,因为序列值在不同事务之间被缓存(预先保留)。

答案 1 :(得分:0)

这是一个数字的序列,它不关心你是否使用了“当前值” 与MySQL相反,在Oracle中,Sequence不依赖于列,但它是一个单独的对象,您可以从(通过your_sequence.nextval)询问值。为了处理唯一性,它不会收回值并再次提供它们。

如果您总是想要删除密集的ID-s序列,则必须

  • 重新排列ID-s(读取:更改比删除的行更新的行的ID-s)或
  • 在不知道您的任务的情况下,我建议使用DENSE_RANK analytic function查询数据集,并将实际(表内)ID与行的排名分开。