0

oracle 中是否有办法创建具有自动增量的列,如果删除了一行,则删除的下一个值应替换已删除的行。有没有办法在 oracle 中做到这一点?

4

1 回答 1

0

您所描述的行为(删除后的序列中有“漏洞”)将始终发生在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 的子表,那将是复杂且有风险的。

于 2017-11-03T17:34:16.897 回答