创建序列值
序列值主要用于产生整数序列值,其产生整数值按照用户指定规则进行递增或递减。
主要语法结构
语法格式
sql
CreateSeqStmt::=
CREATE SEQUENCE [IF NOT EXISTS] sequence_name [OptSeqList] [COMMENT SCONST]
参数说明
IF NOT EXISTS
:创建序列值时若同名序列值存在则忽略错误。该关键字无法验证已有同名序列值与当前创建序列值属性是否一致。sequence_name
:序列值名称。OptSeqList
:可选的序列值表达式,用来指定序列值的最小值、最大值、起始值、增长步长等约束条件。COMMENT SCONST
:可选的序列值注释信息。
序列值表达式OptSeqList
语法格式
sql
OptSeqList::=
[OptSeqElem]...
OptSeqElem::=
START WITH var_value
| [CACHE var_value | NOCACHE]
| [CYCLE | NOCYCLE]
| INCREMENT BY var_value
| [MAXVALUE var_value | NOMAXVALUE ]
| [MINVALUE var_value | NOMINVALUE ]
参数说明
START WITH var_value
:var_value
为序列的初始值;如果序列递增,未指定初始值,则初始值为最小值;如果序列递减,未指定初始值,则初始值为最大值。[CACHE var_value | NOCACHE]
:value
是缓存序列值个数,默认1;若系统重启,则序列值起始值将变为cache后的下一个值。
集群环境下,缓存在当前工作节点1,若在工作节点2使用序列值,则序列值起始站为节点1 cache后的下一个值,其他工作节点使用起始值依此类推。
举例:(起始值1,cache 20,节点1:1-20,节点2:21-40,节点3:41-60......; 集群重启后序列值起始值从61开始)。[CYCLE | NOCYCLE]
:值达到最大值后是否循环,如果不循环,达到最大值后,继续产生新值会发生错误;默认不循环。INCREMENT BY var_value
:var_value
为序列步长(序列增加的幅度),默认为1,如果是负则按此步长递减。[MAXVALUE var_value | NOMAXVALUE ]
:定义序列生成器能产生的最大值,如果序列递减,未指定最大值,默认为-1;NOMAXVALUE
无最大值限制(默认为9223372036854775807)。[MINVALUE var_value | NOMINVALUE ]
:定义序列生成器能产生的最小值,如果序列递增,未指定最小值,默认为1;NOMINVALUE
无最小值限制(默认为-9223372036854775808)。
示例
示例1
创建一个名为seq_test的序列值,该序列值最小值为1,最大值为1000,起始值为100,步长为1。sqlCREATE SEQUENCE seq_test MINVALUE 1 MAXVALUE 1000 START WITH 100 INCREMENT BY 1;
示例2
NOMINVALUE
:没有最小值定义,对于递减序列,数据库能够产生的最小值是BIGINT的最小值;对于递增序列,最小值是1。NOMAXVALUE
:没有最大值定义,对于递增序列,数据库能够产生的最大值是BIGINT的最大值;对于递减序列,最大值是-1。sql--(1)NOMINVALUE、MAXVALUE xxxxx CREATE SEQUENCE seq1 START WITH 1 NOMINVALUE MAXVALUE 1000 NOCYCLE CACHE 500 ORDER; --(2)NOMAXVALUE、MINVALUE xxxxx CREATE SEQUENCE seq2 START WITH 10 MINVALUE 1 NOMAXVALUE NOCYCLE CACHE 500 ORDER; --(3)NOMINVALUE、NOMAXVALUE CREATE SEQUENCE seq3 START WITH 10 NOMINVALUE NOMAXVALUE NOCYCLE CACHE 500 ORDER; --(4)MINVALUE xxxxx、MAXVALUE xxxxx CREATE SEQUENCE seq4 START WITH 10 MINVALUE 1 MAXVALUE 1000 NOCYCLE CACHE 500 ORDER;
示例3
创建一个与原序列值名称相同但最大值属性不同的序列值,不会影响原序列值。sqlSQL> CREATE SEQUENCE IF NOT EXISTS seq_1 MINVALUE 100 MAXVALUE 200 START WITH 199 INCREMENT BY -100 CYCLE; SQL> SELECT ds.seq_name,ds.max_val FROM dba_sequences ds WHERE ds.seq_name='SEQ_1'; SEQ_NAME |MAX_VAL --------------------- SEQ_1 |200 SQL> CREATE SEQUENCE IF NOT EXISTS seq_1 /*创建一个与原序列值MAXVALUE不同的序列值,此处会返回警告*/ MINVALUE 100 MAXVALUE 500 START WITH 199 INCREMENT BY -100 CYCLE; SQL> SELECT ds.seq_name,ds.max_val FROM dba_sequences ds WHERE ds.seq_name='SEQ_1';/*不会对原序列值产生影响*/ SEQ_NAME |MAX_VAL --------------------- SEQ_1 |200