oracle中是否有一种方法可以创建一个具有自动增量的列,如果删除了一行,则删除的下一个值应该替换已删除的行。有没有办法在oracle中做到这一点?
答案 0 :(得分:0)
您正在描述的行为(在删除后的序列中有#34;洞"将始终与SEQUENCE
一起发生。对于大多数应用程序来说,它是一件好事并且工作得很好,因为大多数时候,表的id
是人为的,没有意义。它的唯一用途是将表与关系连接起来,因此,孔是不重要的。
在您的情况下,如果您想创建连续序列并填充空白(如果已创建),则需要在插入时创建一个触发器,使用第一个"空洞"的值来更新您的ID。使用SELECT
这样的序列在您的序列中找到:
SELECT MIN(tb.id) + 1 "first_seq_hole"
FROM yourTable tb
WHERE NOT EXISTS
(SELECT tb.id FROM yourTable tb2 WHERE tb.id + 1 = tb2.id)
虽然,我不确定你的要求是什么,但在某些时候你的序列中可能仍有漏洞(比如你删除10个随机行,永远不要插入任何填充它们)。这是不可避免的,除非你在改变现有ID的方法上工作,以便在删除行时立即填补空白。如果你有使用该ID的子表,这将是复杂和危险的。