自动编号和标识列

身份列为 Db2® 提供了一种方法,用于自动为添加到表中的每行生成唯一数字值。

当创建一个表时,如果必须唯一标识将添加至该表的每一行,那么可向该表添加一个标识列。 要保证为添加至表的每一行提供唯一数字值,您应在标识列定义唯一索引,或将其声明为主键。

其他地方使用的标识列有订单号、职员编号、股票代码或者事故编号。 标识列的值可以“始终”或“在缺省情况下”由 DB2 数据库管理器生成。

将对定义为 GENERATED ALWAYS 的标识列给予始终由 DB2 数据库管理器生成的值。 不允许应用程序提供显式的值。 定义成 GENERATED BY DEFAULT 的标识列使应用程序能够显式地为标识列提供值。 如果应用程序不提供值,那么 DB2 将生成一个值。 因为由应用程序控制该值,所以 DB2 不能保证该值的唯一性。 GENERATED BY DEFAULT 子句用于数据传播,其目的是复制现有表的内容;或者用于卸装和重新装入表。

在创建之后,首先必须使用 DEFAULT 选项来添加列,以获取现有的缺省值。 然后,可以更改 (ALTER) 缺省值,以使其成为标识列。

如果将行插入到指定了显式标识列值的表中,那么不会更新在内部生成的下一个值,并且可能会与该表中的现有值发生冲突。 如果主键或在标识列定义的唯一索引在标识列强制执行值的唯一性,那么重复值将生成一条错误消息。

要对新表定义标识列,在 CREATE TABLE 语句中使用 AS IDENTITY 子句。

示例

以下是在 CREATE TABLE 语句上定义标识列的一个示例:
   CREATE TABLE table (col1 INT,
                       col2 DOUBLE,
                       col3 INT NOT NULL GENERATED ALWAYS AS IDENTITY
                                         (START WITH 100, INCREMENT BY 5))

在本示例中,第三个列是标识列。 还可以指定该列中用来 在添加行时唯一标识每一行的值。 此处输入的第一行将值 100 放在列中; 添加到表中的每个后续行的关联值都增加了 5。