早些时候,我们使用'所产生的总是'生成的价值观为一个主要关键。但是,现在建议,我们应该,而不是使用'所产生的总',使用顺序,用于填充数值的主要关键。你认为什么可能的原因的这一变化?这只是一个选择的问题?

早码:

CREATE TABLE SCH.TAB1
 (TAB_P         INTEGER         NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1, NO CACHE),
.
.
);

现在是

CREATE TABLE SCH.TAB1
 (TAB_P         INTEGER ),
.
.
);

现在插入的,产生的价值TAB_P通过顺序。

有帮助吗?

解决方案

我倾向于使用标识列而不是序列,但我会比较两者。

序列可以为任何目的生成数字,而标识列严格附加到表中的列。

由于序列是一个独立的对象,它可以为多个表(或其他任何表)生成数字,并且在删除任何表时不会受到影响。删除具有标识列的表时,没有该标识列最后分配的值的内存。

一个表只能有一个标识列,所以如果你想在同一个表中将多个顺序号记录到不同的列中,序列对象就可以处理它。

数据库中序列号生成器的最常见要求是为行分配技术密钥,该行由标识列很好地处理。对于更复杂的数字生成需求,序列对象提供了更大的灵活性。

其他提示

这可能是为了在表上有大量删除的情况下处理id。

例如:如果是身份,如果你的ids是 1 2 3

现在,如果您删除记录3,您的表格将会有 1 2

然后,如果您插入新记录,那么ID就会出现 1 2 4

与此相反,如果您没有使用标识列并使用代码生成id,那么在删除新插入后,您可以将id计算为max(id)+ 1,因此ID将按顺序排列 1 2 3

我想不出任何其他原因,为什么不应该使用标识列。

下面有东西,我现在publib站:

比较身份列和序列

虽然有相似之处的身份列和序列,也有差异。该特征的每一个时可以使用设计数据库和应用程序。

一个身份列有以下特点:

  • 一个身份列可以被定义为 表的一部分,只有当表 被创建。一旦创建一个表, 你不能改变它添加一个 身份列。(但是,现有的 身份列特点可能 被更改。)
  • 一个身份列 自动产生的价值一 单一的表格。
  • 当一个身份 列定义为产生的 总值使用的是总是 产生的数据库管理员。应用程序不允许 提供其自己的价值观在 修改的内容 表。

序列目的具有以下特点:

  • 序的对象是一个数据库 对象是不依赖于任何一个 表。
  • 序的对象产生 顺序的价值观,可以用在 任何SQL或属的声明。
  • 由于一个序列目的可以使用 通过的任何应用程序,有两个 表达方式用来控制 检索的下一个价值 指定的序列和价值 产生前发表的声明 正在执行。以前的价值 表达返回最近 所产生的价值的指定 序列对于以前声明 在本届会议。下一个 值表达返回下一个 价值指定序列。的 使用这些表达方式允许的 同样值被用在几个 SQL和属的发言内 几个表格。

虽然这些是不是所有的特性这两个项目,这些特点将帮助确定哪些使用取决于数据库的设计和应用使用该数据库。

我不知道为什么有人会使用标识列而不是序列。 序列完成同样的事情并且更直接。标识列更加困难,尤其是当您想要将数据卸载和加载到其他环境时。我不打算讨论所有差异,因为可以在手册中找到这些信息,但我可以告诉你,当一个用户想要将数据从一个环境迁移到另一个环境时,DBA必须几乎总是参与其中参与是因为它可能让用户感到困惑。使用序列时我们没有问题。我们允许用户更新任何模式对象,以便他们可以根据需要更改其序列。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top