SQLPlus序列 - 多个表

时间:2012-07-30 18:37:37

标签: sql oracle sequence sqlplus

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

CREATE SEQUENCE auto_increment
  START WITH 1
  INCREMENT BY 1;

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

3 个答案:

答案 0 :(得分:3)

是的,如果您使用相同的序列,序列访问将相互影响。然而,你的问题的基调让我觉得你期望序列是连续的。

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

答案 1 :(得分:1)

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

当然,如果序列给表A赋值为1,它永远不会给B上定义的触发器赋予相同的值。因为序列不会产生无间隙的值集(即你可以保证那里将在每个表中“丢失”值,无论你创建多少序列),这不应该是一个主要的缺点。

答案 2 :(得分:1)

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