1

我在这里尝试使用 Dennis 的解决方案作为 Oracle 数据库中 auto_increment 的实现。假设我创建一个序列如下:

CREATE SEQUENCE auto_increment
  START WITH 1
  INCREMENT BY 1;

如果我想要多个表中的 auto_increment 行为,我可以只对所有表使用这个序列吗?或者我需要每张桌子一个单独的序列吗?也就是说,一个表的序列增量是否会受到另一个使用该序列的表的影响?

4

3 回答 3

3

是的,如果您使用相同的序列,序列访问将相互影响。但是,您的问题的语气使我认为您希望序列是连续的。

不要被愚弄,序列不是连续的。唯一可以保证的是检索到的数字是唯一的,并且按升序排列(在您的情况下)

于 2012-07-30T18:40:57.823 回答
1

您可以对许多表使用相同的序列。这样做是非常规的,它会导致对序列的更多争用,并且如果由于环境之间的导出和导入等原因需要重置序列值,这会使生活变得更加困难,但它会工作。

当然,如果序列为表 A 提供值 1,它永远不会为 B 上定义的触发器提供相同的值。由于序列不会生成无间隙的值集(即,您可以保证将有“无论您创建多少序列,每个表中都缺少”值),这不应该是一个主要的缺点。

于 2012-07-30T18:41:21.900 回答
1

序列是连续的。然而,有很多事情会导致序列中的间隙,例如回滚、提交(因为序列生成器发布序列而不管提交或回滚),以及多个表的相同序列。

于 2012-10-23T15:38:01.163 回答