Sql 序列中指定值和起始值的差异

Sql 序列中指定值和起始值的差异,sql,db2,sequence,Sql,Db2,Sequence,我已经创建了一个序列 CREATE SEQUENCE CA_SEQUENCE_NUMBER_SEQ start with 9000000000 increment by 1 nocycle nocache; 指定值和起始值是相同的数字。请告诉我原因是什么 请参考图片以获得清晰的图片 此图像详细信息来自SYSSEQUENCES数据字典视图我假设序列已被更改。例如 CREATE SEQUENCE CA_SEQUENCE_NUMBER_SEQ AS DECIMAL(31,0) start with

我已经创建了一个序列

CREATE SEQUENCE CA_SEQUENCE_NUMBER_SEQ
start with 9000000000
increment by 1
nocycle
nocache;
指定值和起始值是相同的数字。请告诉我原因是什么

请参考图片以获得清晰的图片


此图像详细信息来自SYSSEQUENCES数据字典视图

我假设序列已被更改。例如

CREATE SEQUENCE CA_SEQUENCE_NUMBER_SEQ AS DECIMAL(31,0) start with 7000000000;
values nextval for CA_SEQUENCE_NUMBER_SEQ;
ALTER SEQUENCE CA_SEQUENCE_NUMBER_SEQ restart with 9000000000;
然后将显示
SYSCAT.SEQUENCES

select NEXTCACHEFIRSTVALUE from syscat.sequences where seqname = 'CA_SEQUENCE_NUMBER_SEQ'"

NEXTCACHEFIRSTVALUE              
---------------------------------
                       7000000000.

  1 record(s) selected.
但是在为CA_SEQUENCE_NUMBER_SEQ再次调用
values nextval之后,NEXTCACHEFIRSTVALUE将更新

values nextval for CA_SEQUENCE_NUMBER_SEQ;

1                                
---------------------------------
                      9000000000.

  1 record(s) selected.

select NEXTCACHEFIRSTVALUE from syscat.sequences where seqname = 'CA_SEQUENCE_NUMBER_SEQ'"

NEXTCACHEFIRSTVALUE              
---------------------------------
                       9000000020.

  1 record(s) selected.

我假设序列已经改变了。例如

CREATE SEQUENCE CA_SEQUENCE_NUMBER_SEQ AS DECIMAL(31,0) start with 7000000000;
values nextval for CA_SEQUENCE_NUMBER_SEQ;
ALTER SEQUENCE CA_SEQUENCE_NUMBER_SEQ restart with 9000000000;
然后将显示
SYSCAT.SEQUENCES

select NEXTCACHEFIRSTVALUE from syscat.sequences where seqname = 'CA_SEQUENCE_NUMBER_SEQ'"

NEXTCACHEFIRSTVALUE              
---------------------------------
                       7000000000.

  1 record(s) selected.
但是在为CA_SEQUENCE_NUMBER_SEQ再次调用
values nextval之后,NEXTCACHEFIRSTVALUE将更新

values nextval for CA_SEQUENCE_NUMBER_SEQ;

1                                
---------------------------------
                      9000000000.

  1 record(s) selected.

select NEXTCACHEFIRSTVALUE from syscat.sequences where seqname = 'CA_SEQUENCE_NUMBER_SEQ'"

NEXTCACHEFIRSTVALUE              
---------------------------------
                       9000000020.

  1 record(s) selected.

create语句似乎发生在一段时间以前,因为序列生成了>700000个数字。可以通过发出
ALTER sequence
语句从任何位置重新启动序列,例如:

ALTER SEQUENCE CA_SEQUENCE_NUMBER_SEQ RESTART 7000000000
您可以通过如下方式使用
RESTART
将其指向
CREATE SEQUENCE
语句中指定的起始值:

ALTER SEQUENCE CA_SEQUENCE_NUMBER_SEQ RESTART
以下是文档的相关部分:

>>-更改序列--序列名称----------------------------------------->
.-----------------------------------------------.   
V(1)|
>----------+-重新启动--+-----------------------------------+-+-+-------------><
|“-带--数值常量-”|
重新启动 重新启动序列。如果未指定数值常量,则序列将在最初创建序列的CREATE sequence语句上以隐式或显式指定为起始值的值重新启动。 带数值常数 使用指定的值重新启动序列。该值可以是可分配给与序列(SQLSTATE 42815)关联的数据类型列的任何正值或负值,小数点右侧不存在非零位(SQLSTATE 428FA)。
create语句似乎发生在一段时间以前,因为序列生成了>700000个数字。可以通过发出
ALTER sequence
语句从任何位置重新启动序列,例如:

ALTER SEQUENCE CA_SEQUENCE_NUMBER_SEQ RESTART 7000000000
您可以通过如下方式使用
RESTART
将其指向
CREATE SEQUENCE
语句中指定的起始值:

ALTER SEQUENCE CA_SEQUENCE_NUMBER_SEQ RESTART
以下是文档的相关部分:

>>-更改序列--序列名称----------------------------------------->
.-----------------------------------------------.   
V(1)|
>----------+-重新启动--+-----------------------------------+-+-+-------------><
|“-带--数值常量-”|
重新启动 重新启动序列。如果未指定数值常量,则序列将在最初创建序列的CREATE sequence语句上以隐式或显式指定为起始值的值重新启动。 带数值常数 使用指定的值重新启动序列。该值可以是可分配给与序列(SQLSTATE 42815)关联的数据类型列的任何正值或负值,小数点右侧不存在非零位(SQLSTATE 428FA)。
如果您需要更多信息,请询问我。感谢教授,我编辑了一个现有的问题。我无法创建一个新的,虽然我已经更正了多次,张贴您的表DDL。
id
IDENTITY
列吗?如果没有,请使用
insert into table(选择()上方的行数()+合并((从表中选择max(id)),0)作为id,从表1中选择名称)
对不起,您不能只更改问题。它使所有已经给出的答案无效,并将使后来的人感到困惑。如果你有一个问题禁令,你需要改进糟糕的问题,以获得足够的选票来放松禁令。如果你需要更多信息,请问我。感谢教授,我编辑了一个现有的问题。我无法创建一个新的,虽然我已经更正了多次,张贴您的表DDL。
id
IDENTITY
列吗?如果没有,请使用
insert into table(选择()上方的行数()+合并((从表中选择max(id)),0)作为id,从表1中选择名称)
对不起,您不能只更改问题。它使所有已经给出的答案无效,并将使后来的人感到困惑。如果你有一个问题禁令,你需要改进糟糕的问题,以获得足够的选票来放松禁令。