标识列为 DB2® 提供一种方法,可自动为添加至表的每一行生成唯一数值。
当创建一个表时,如果必须唯一标识将添加至该表的每一行,那么可向该表添加一个标识列。要保证为添加至表的每一行提供唯一数字值,您应在标识列定义唯一索引,或将其声明为主键。
其他地方使用的标识列有订单号、职员编号、股票代码或者事故编号。标识列的值可以“始终”或“在缺省情况下”由 DB2 数据库管理器生成。
将对定义为 GENERATED ALWAYS 的标识列给予始终由 DB2 数据库管理器生成的值。不允许应用程序提供显式的值。定义成 GENERATED BY DEFAULT 的标识列使应用程序能够显式地为标识列提供值。如果应用程序不提供值,那么 DB2 将生成一个值。因为由应用程序控制该值,所以 DB2 不能保证该值的唯一性。GENERATED BY DEFAULT 子句用于数据传播,其目的是复制现有表的内容;或者用于卸装和重新装入表。
在创建之后,首先必须使用 DEFAULT 选项来添加列,以获取现有的缺省值。然后,可以更改 (ALTER) 缺省值,以使其成为标识列。
如果将行插入到指定了显式标识列值的表中,那么不会更新在内部生成的下一个值,并且可能会与该表中的现有值发生冲突。如果主键或在标识列定义的唯一索引在标识列强制执行值的唯一性,那么重复值将生成一条错误消息。
要对新表定义标识列,在 CREATE TABLE 语句中使用 AS IDENTITY 子句。
CREATE TABLE table (col1 INT,
col2 DOUBLE,
col3 INT NOT NULL GENERATED ALWAYS AS IDENTITY
(START WITH 100, INCREMENT BY 5))
在本示例中,第三个列是标识列。还可以指定该列中用来 在添加行时唯一标识每一行的值。在输入的第一行的列中具有值“100”;添加到该表中的每个后续行都具有相关联的值,这些值将依次增加五。