首批通过分布式安全可靠测评,为关键业务系统打造
创建序列
更新时间:2024-12-26 23:00:00
在 OceanBase 数据库中,序列(Sequence)是数据库按照一定规则生成的自增数字序列号,通常是一组间隔的数值(为数字类型)。由于序列具有自增的特性,故通常会被用作主键和唯一键。
可以使用 CREATE SEQUENCE 语句来创建序列。序列提供了两个伪列 CURRVAL和 NEXTVAL,用于返回当前的序列值和下一个序列值。每当查询 NEXTVAL 都会推进 CURRVAL 值。
SQL 语法如下:
CREATE SEQUENCE [IF NOT EXISTS] [database_name.]sequence_name
[MINVALUE int_value | NOMINVALUE]
[MAXVALUE int_value | NOMAXVALUE]
[START WITH int_value]
[INCREMENT BY int_value]
[CACHE int_value | NOCACHE]
[ORDER | NOORDER]
[CYCLE | NOCYCLE];
语句使用说明:
执行该语句的用户需要具备
CREATE权限。IF NOT EXISTS:可选,如果待创建的序列已存在,并且没有指定IF NOT EXISTS,则系统会报错。database_name.:可选,用于指定序列所在的数据库。如果不指定database_name.,则默认为创建当前登录数据库的序列。MINVALUE int_value | NOMINVALUE:用于指定序列的最小值,取值范围为 [-1027 ~ (1027-1)]。如果指定为
NOMINVALUE,则升序时最小值为 1,降序时最小值为 -(1027-1)。如果不指定
MINVALUE,则缺省为NOMINVALUE。MAXVALUE int_value | NOMAXVALUE:用于指定序列的最大值,取值范围为 [(-1027+1) ~ (1028-1)]。如果指定为
NOMAXVALUE,则升序时最大值为(1028-1),降序时最大值为-1。如果不指定
MAXVALUE,则缺省为NOMAXVALUE。START WITH:用于指定序列的起始值。该值必须小于等于MAXVALUE,且大于等于MINVALUE。如果不指定,则升序时默认取值为最小值,降序时默认取值为最大值。INCREMENT BY:用于指定序列的自增步数。该值不可以为0。如果指定为正数,则序列为升序;如果指定为负数,则序列为降序。如果不指定,则缺省值为1。CACHE:用于指定在内存中预分配的自增值个数,默认为20。ORDER | NOORDER:用于指定序列的值是否按顺序生成。ORDER表示按顺序生成,NOORDER表示不按顺序生成。默认为NOORDER。CYCLE | NOCYCLE:用于指定序列的值是否循环生成。CYCLE表示循环生成,NOCYCLE表示不循环生成。默认为NOCYCLE。
注意
- 如果同时指定
MINVALUE和MAXVALUE,则MINVALUE必须小于MAXVALUE。 MAXVALUE和MINVALUE之差必须大于等于INCREMENT BY int_value。CACHE的值必须大于1,如果CACHE INT_VALUE的值为1,则等价于NOCACHE。- 指定了
CYCLE,且INCREMENT BY的值小于0时,必须指定MINVALUE。 - 指定了
CYCLE时,CACHE的数量必须不能超过一个CYCLE。
创建一个序列 seq1 并指定自增步数为 2 的示例如下:
obclient> CREATE SEQUENCE seq1 START WITH 1 MINVALUE 1 MAXVALUE 10 INCREMENT BY 2 NOCYCLE NOORDER CACHE 30;
更多 CREATE SEQUENCE 语句的信息,参见 CREATE SEQUENCE。
相关文档
更多序列相关的操作,参见以下文档: