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

修改序列

SQL新手 2022-12-08
591

您可以通过 ALTER SEQUENCE 语句用来修改序列。本文介绍如何修改序列。

语法

该语句用于更改现有序列的增量、最小值和最大值、缓存数量和行为,对应操作仅影响后续的序列号。

说明

用户只能操作属于自己 Schema 中的序列,或者拥有该序列的有 ALTER 对象权限。

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

参数解释

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

示例

  1. 查看序列 seq1 的最大值。

    obclient> SELECT sequence_name,max_value FROM oceanbase.__all_sequence_object WHERE sequence_name='seq1';
    +---------------+-----------+
    | sequence_name | max_value |
    +---------------+-----------+
    | seq1          |         5 |
    +---------------+-----------+
    1 row in set
    
  2. 将自增列的最大值修改成 1024

    obclient> ALTER SEQUENCE seq1 MAXVALUE 1024 CYCLE;
    Query OK, 0 rows affected
    
  3. 再次查询序列 seq1 的最大值。

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

评论