暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

创建序列

SQL新手 2022-12-08
252

您可以通过 CREATE SEQUENCE 语句用来创建序列。本文介绍如何创建序列。

语法

CREATE SEQUENCE [ schema. ] sequence_name
{ START WITH int_value
|[ INCREMENT BY int_value ]
|[ MINVALUE int_value | NOMINVALUE ]
|[ MAXVALUE int_value | NOMAXVALUE ]  
|[ CACHE int_value | NOCACHE ]
|[ ORDER | NOORDER ]
|[ CYCLE | NOCYCLE ]  
};

参数说明

参数描述
schema.指定包含序列的 Schema。 如果省略 Schema,则数据库会在用户当前所在的 Schema 中创建序列。SET GLOBALSET GLOBAL
sequence_name要创建的序列名称。SET GLOBALSET GLOBAL
MINVALUE int_value指定序列的最小值,int_value 的取值范围是 [-9223372036854775808 ~ 9223372036854775807]。SET GLOBALSET GLOBAL
NOMINVALUENOMINVALUE 为默认值。 如果指定为 NOMINVALUE,则升序时最小值为 1,降序时最小值为-9223372036854775808。SET GLOBALSET GLOBAL
MAXVALUE int_value指定序列的最大值,int_value 的取值范围是 [-9223372036854775808 ~ 9223372036854775807]。
注意
  • 同时指定 MINVALUE 和 MAXVALUE 时,MINVALUE 必须小于 MAXVALUE
  • MAXVALUE 和 MINVALUE 之差必须大于等于 INCREMENT BY 中 的 int_value
NOMAXVALUENOMAXVALUE 为默认值。 如果指定为 NOMAXVALUE,则升序时最大值为 9223372036854775807,降序时最大值为 -1。SET GLOBALSET GLOBAL
START WITH int_value指定序列的起始值。int_value 必须小于等于 MAXVALUE,且大于等于 MINVALUE。 如果不指定,则升序时默认取值为最小值,降序时默认取值为最大值。SET GLOBAL
INCREMENT BY int_value指定序列的自增步数。int_value 不可以为 0。 如果指定为正数,则序列为升序;如果指定为负数,则序列为降序。不指定时缺省值为 1。SET GLOBALSET GLOBAL
CACHE int_value指定在内存中预分配的自增值个数,int_value 默认为 20。 CACHE int_value 的值必须大于 1,如果 CACHE INT_VALUE 的值为 1,则等价于 NOCACHE。SET GLOBAL
NOCACHE指定序列的值为未预先分配。 如果同时省略 CACHE 和 NOCACHE,则数据库默认缓存 20 个序列号。SET GLOBALSET GLOBAL
ORDER指定序列的值按顺序生成。SET GLOBALSET GLOBAL
NOORDERNOORDER 为默认值,即不保证序列的值按顺序生成。SET GLOBALSET GLOBAL
CYCLE指定序列的值循环生成,即序列在达到其最大值或最小值后继续生成值。在升序达到最大值后,它会生成最小值。在降序序列达到其最小值后,它会生成其最大值。
注意
  • 如果指定了 CYCLE,而且 INCREMENT BY int_value 小于 0 时,必须指定 MINVALUE
  • 如果指定了 CYCLECACHE 的数量不能超过一个 CYCLE
NOCYCLENOCYCLE 为默认值,指定序列在达到其最大值或最小值后无法生成更多值。SET GLOBALSET GLOBAL

示例

在创建一个序列 seq1 并指定自增步数为 2。如下示例中,对 seq1.nextval 的第一个引用返回 1,第二个引用返回 2。每个后续引用的返回值都比前一个大 1。

  1. 创建 seq1 序列。

    obclient> CREATE SEQUENCE seq1 MINVALUE 1 MAXVALUE 5 NOCYCLE NOORDER NOCACHE;
    Query OK, 0 rows affected
    

    说明

    序列创建成功后,可以通过 USER_SEQUENCESALL_SEQUENCESDBA_SEQUENCES 视图查看自己创建的序列。

  2. 对 seq1.nextval 的第一个引用。

    obclient> SELECT seq1.nextval FROM DUAL;
    +---------+
    | NEXTVAL |
    +---------+
    |       1 |
    +---------+
    1 row in set
    
  3. 第二个引用返回。

    obclient> SELECT seq1.nextval FROM DUAL;
    +---------+
    | nextval |
    +---------+
    |       2 |
    +---------+
    1 row in set
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论