我在这里尝试使用 Dennis 的解决方案作为 Oracle 数据库中 auto_increment 的实现。假设我创建一个序列如下:
CREATE SEQUENCE auto_increment
START WITH 1
INCREMENT BY 1;
如果我想要多个表中的 auto_increment 行为,我可以只对所有表使用这个序列吗?或者我需要每张桌子一个单独的序列吗?也就是说,一个表的序列增量是否会受到另一个使用该序列的表的影响?
是的,如果您使用相同的序列,序列访问将相互影响。但是,您的问题的语气使我认为您希望序列是连续的。
不要被愚弄,序列不是连续的。唯一可以保证的是检索到的数字是唯一的,并且按升序排列(在您的情况下)
您可以对许多表使用相同的序列。这样做是非常规的,它会导致对序列的更多争用,并且如果由于环境之间的导出和导入等原因需要重置序列值,这会使生活变得更加困难,但它会工作。
当然,如果序列为表 A 提供值 1,它永远不会为 B 上定义的触发器提供相同的值。由于序列不会生成无间隙的值集(即,您可以保证将有“无论您创建多少序列,每个表中都缺少”值),这不应该是一个主要的缺点。
序列是连续的。然而,有很多事情会导致序列中的间隙,例如回滚、提交(因为序列生成器发布序列而不管提交或回滚),以及多个表的相同序列。