当我更改DB2V11数据库的Identity属性时,列内容会发生什么变化?

当我更改DB2V11数据库的Identity属性时,列内容会发生什么变化?,db2,identity-column,Db2,Identity Column,当我更改标识列的属性时,已填充表的标识列的值是否会保留 我有两个表,其中有一个整数标识列。在一个表table1中,我只想禁用此属性。在另一个表表2中,我想更改标识计数器的值范围 这样做的想法如下: db2 "alter table <table1> ALTER COLUMN <column> drop IDENTITY" db2 "alter table <table2> ALTER COLUMN <column> drop IDENTITY"

当我更改标识列的属性时,已填充表的标识列的值是否会保留

我有两个表,其中有一个整数标识列。在一个表
table1
中,我只想禁用此属性。在另一个表
表2
中,我想更改标识计数器的值范围

这样做的想法如下:

db2 "alter table <table1> ALTER COLUMN <column> drop IDENTITY"

db2 "alter table <table2> ALTER COLUMN <column> drop IDENTITY" 
db2 "alter table <table2> ALTER COLUMN <column> set generated always as identity  
     (START WITH 1, INCREMENT BY 1, MINVALUE 1, MAXVALUE 65536, CYCLE, NO CACHE, NO ORDER)".
db2“altertable alter COLUMN drop IDENTITY”
db2“alter table alter COLUMN drop IDENTITY”
db2“alter table alter COLUMN set始终作为标识生成
(从1开始,递增1,最小值1,最大值65536,循环,无缓存,无顺序)”。

由于我只更改了表1中列的属性,并增加了表2中列的值范围,因此我希望受影响列中的值能够保留。还是所有的值都被设置为空,并带有删除标识?

这很容易自己测试,不是吗

[db2inst1@somehost ~]$ db2 "create table test(f1 int not null generated always as identity, f2 varchar(20))"
DB20000I  The SQL command completed successfully.
[db2inst1@somehost ~]$ db2 "insert into test (f2) values ('foobar')"
DB20000I  The SQL command completed successfully.
[db2inst1@somehost ~]$ db2 "insert into test (f2) values ('foobar')"
DB20000I  The SQL command completed successfully.
[db2inst1@somehost ~]$ db2 "select * from test"

F1          F2
----------- --------------------
          1 foobar
          2 foobar

  2 record(s) selected.

[db2inst1@somehost ~]$ db2 "alter table test alter column f1 drop identity"
DB20000I  The SQL command completed successfully.
[db2inst1@somehost ~]$ db2 "select * from test"

F1          F2
----------- --------------------
          1 foobar
          2 foobar

  2 record(s) selected.
因此,不会修改前一个
IDENTITY
的现有值

但是请注意,如果您按照显示的方式在
表2
上重新创建标识,它将生成至少一些与现有值重叠的值,从而导致重复的“标识”或插入异常

[db2inst1@somehost ~]$ db2 "alter table test alter column f1 set generated always as identity
>      (START WITH 1, INCREMENT BY 1, MINVALUE 1)"
DB20000I  The SQL command completed successfully.
[db2inst1@somehost ~]$ db2 "insert into test (f2) values ('foobar')"
DB20000I  The SQL command completed successfully.
[db2inst1@somehost ~]$ db2 "select * from test"

F1          F2
----------- --------------------
          1 foobar
          2 foobar
          1 foobar

  3 record(s) selected.

自己测试很容易,不是吗

[db2inst1@somehost ~]$ db2 "create table test(f1 int not null generated always as identity, f2 varchar(20))"
DB20000I  The SQL command completed successfully.
[db2inst1@somehost ~]$ db2 "insert into test (f2) values ('foobar')"
DB20000I  The SQL command completed successfully.
[db2inst1@somehost ~]$ db2 "insert into test (f2) values ('foobar')"
DB20000I  The SQL command completed successfully.
[db2inst1@somehost ~]$ db2 "select * from test"

F1          F2
----------- --------------------
          1 foobar
          2 foobar

  2 record(s) selected.

[db2inst1@somehost ~]$ db2 "alter table test alter column f1 drop identity"
DB20000I  The SQL command completed successfully.
[db2inst1@somehost ~]$ db2 "select * from test"

F1          F2
----------- --------------------
          1 foobar
          2 foobar

  2 record(s) selected.
因此,不会修改前一个
IDENTITY
的现有值

但是请注意,如果您按照显示的方式在
表2
上重新创建标识,它将生成至少一些与现有值重叠的值,从而导致重复的“标识”或插入异常

[db2inst1@somehost ~]$ db2 "alter table test alter column f1 set generated always as identity
>      (START WITH 1, INCREMENT BY 1, MINVALUE 1)"
DB20000I  The SQL command completed successfully.
[db2inst1@somehost ~]$ db2 "insert into test (f2) values ('foobar')"
DB20000I  The SQL command completed successfully.
[db2inst1@somehost ~]$ db2 "select * from test"

F1          F2
----------- --------------------
          1 foobar
          2 foobar
          1 foobar

  3 record(s) selected.

DB2forz/OSV11?DB2forLUW11.1?11.5? 您有机会看一下文档吗?DB2forz/OSV11?DB2forLUW11.1?11.5? 你有机会看一下文档吗?超级-两个非常好的提示-非常感谢。1) 这些值显然保持不变。2) 如果再次从1开始,逻辑上会出现异常,因此我必须首先通过子查询获得最大值+1。再次感谢!超级-两个非常好的提示-非常感谢。1) 这些值显然保持不变。2) 如果再次从1开始,逻辑上会出现异常,因此我必须首先通过子查询获得最大值+1。再次感谢!