GENERATED ALWAYS

来源:互联网 发布:会员分销系统源码 编辑:程序博客网 时间:2024/04/26 03:24
DB2 generated by default generated always as

 

生成列,用于自动生成列值,它是由表达式而不是从insert或update操作派生其值。

始终由 DB2 生成:DB2 可以保证以 GENERATED ALWAYS 方式定义的标识列的唯一性,因为它的值始终是由 DB2 生成的。

使用了 可以一词,因为许多用户误解了这种唯一性保证。这可能对也可能不对,它取决于您如何定义标识列的属性。例如,假定您已经定义了一个标识列,它在最小值 1 和最大值 10 之间循环:根据定义,除非该表包含的行非常少(10 行或更少),否则该列中的值将不唯一。

保证列值唯一性的方法就是对列定义唯一性约束。上述表中的 actor_id 列之所以能够保证唯一性,是因为我使用了 alter table 命令将该列定义为表上的主关键字。您是不是想知道为什么我选择使用标识列,这是因为我们可以在不产生与设置表计数器有关的并发性问题的情况下生成数值。

用户提供的标识:GENERATED BY DEFAULT 方式定义的标识列将接受由应用程序提供的值。如果应用程序不为带有这类列的表提供标识值,则 DB2 会为您生成那些值(但是它不能保证标识值的唯一性,除非已经为该表定义了唯一约束 — 就象我的示例那样)。

db2 ? SQL3550W

SQL3550W  第 "<行号>" 行第 "<列号>" 列中的字段值不是 NULL,但目
      标列已定义为 GENERATED ALWAYS。

说明:

在输入文件中遇到非 NULL 字段值。因为目标列的类型为 GENERATED ALWAYS,所
以不能装入该值。列号指定丢失数据的行中的字段。

用户响应:

对于 LOAD,仅当使用 identityoverride 文件类型修饰符时,才能将显式的非
NULL 字段值装入 GENERATED ALWAYS 标识列。对于非标识 GENERATED ALWAYS 列
,可以使用 generatedoverride 文件类型修饰符来将显式的非空值装入到行中。
如果使用这些修饰符不合适,那么必须用 NULL 来替换该字段值(如果 LOAD 将
接受该行)。

对于 IMPORT,没有方法覆盖 GENERATED ALWAYS 列。如果实用程序将接受该行,
那么必须除去该字段值并用 NULL 来替换。


db2 export to D:\***.ixf of ixf select col1,col2,col3 from table1

db2 import  from D:\***.ixf of ixf insert into schema.table1(col1,col2,col3)

原创粉丝点击