南大通用GBase 8s序列修改:提升数据灵活性

原文链接:https://www.gbase.cn/community/post/4210
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

数据库序列是管理自增字段和生成唯一键值的重要工具。在GBase 8s数据库中,通过ALTER SEQUENCE语句,用户可以灵活地修改序列对象的定义,以适应不断变化的业务需求。本文将详细介绍ALTER SEQUENCE语句的语法和用法,帮助您深入理解并有效利用GBase 8s的序列功能。

1、ALTER SEQUENCE语句语法详解

使用 ALTER SEQUENCE 语 句修改序列对象的定义。该语句是 SQL ANSI/ISO 标准的扩展。

语法:

元素

描述

限制

语法

max 

值的新上限

必须为 > CURRVAL (序列当前值)和 restart 的整数 

精确数值 

min 

值的新下限

必须为 < CURRVAL (序列当前值)和 restart 的整数 

精确数值 

owner 

sequence 的所有者 

不能被此语句更改

所有者名称 

restart 

序列中新的第一个值

必须是在 INT8 范围内的整数

精确数值 

sequence 

现有序列的名称

必须存在。不能是同义词

标识符 

size 

内存中要预分配的值的新数目

大于 > 2 但 < 一个循环中的基数(= |(max - min)/step|) 

精确数值 

step 

连续值之间的新的间隔

必须是非零整数

精确数值 

用法:

ALTER SEQUENCE 语句可以修改 syssequences 系统目录表中指定的序列对象的定义。 

ALTER SEQUENCE 重新定义了现有的序列对象。它只影响随后生成的值(和序列高速缓存中任何未使用的值)。您不能使用 ALTER SEQUENCE 语句重命名序列,也不能更改序列的所有者。 

要修改一个序列的定义,您必须是其所有者或 DBA 或具有对该序列的 Alter 权限。只会修改您在 ALTER SEQUENCE 语句中显式指定的序列定义的元素。如果您做出矛盾的更改(例如同时指定 MAXVALUE 和 NOMAXVALUE,或同时指定 CYCLE 和 NOCYCLE 选项),则会发生错误。 

2、示例演示

以下示例基于随后的序列对象和表:

CREATE SEQUENCE seq_2 
  INCREMENT BY 1 START WITH 1 
  MAXVALUE 30 MINVALUE 0 
   NOCYCLE CACHE 10 ORDER; 

CREATE TABLE tab1 (col1 int, col2 int); 
INSERT INTO tab1 VALUES (0, 0); 
INSERT INTO tab1 (col1, col2) VALUES (seq_2.NEXTVAL, seq_2.NEXTVAL);


SELECT * FROM tab1;

       col1        col2
        0           0
        1           1


ALTER SEQUENCE seq_2
   RESTART WITH 5
   INCREMENT by 2
   MAXVALUE 300;

INSERT INTO tab1 (col1, col2) VALUES (seq_2.NEXTVAL, seq_2.NEXTVAL);
INSERT INTO tab1 (col1, col2) VALUES (seq_2.NEXTVAL, seq_2.NEXTVAL);
SELECT * FROM tab1;

       col1        col2
          0           0
          1           1
          5           5
          7           7

注:以上数据库使用版本:GBase8sV8.8_3.5.1

3、关键字讲解

INCREMENT BY 选项

使用 INCREMENT BY 选项指定一个序列中连续数字之间的新间隔。间隔(或 step 值)可以 INT8 范围内的一个正整数(对递增顺序)或负整数(对递减顺序) 。BY关键字是可选的。

RESTART WITH 选项

使用 RESTART WITH 选项指定该序列的新的第一个数字。如果使用 ALTER SEQUENCE 语句指定了 min 或 max 值,则 restart 值必须是 INT8 范围内的整数,它大于等于min值(对于递增顺序),或小于等于max值(对于递减顺序)。WITH 关键字是可选的。

当您使用 RESTART 选项修改序列时,restart 值存储在 syssequences 系统目录表中,直到 NEXTVAL 操作中第一次使用该序列对象。在此以后,该值就在系统目录中复位。使用 dbschema 实用程序可以递增数据库中的序列对象,从而在生成的数字中产生间隔,您可能不希望这些数字在需要序列化整数的应用程序中出现。

MAXVALUE 或 NOMAXVALUE 选项

使用 MAXVALUE 选项指定序列中值的新的上限。最大值(或 max )必须是 INT8 范围内的整数,它大于 sequence.CURRVAL 和 restart (或者,如果未指定 restart ,则大于原 CREATE SEQUENCE 语句中的 origin )。

使用 NOMAXVALUE 选项,以用新的缺省最大值(对递增顺序为 2e64;对递减顺序为 -1)替换当前的限制值。

MINVALUE 或 NOMINVALUE 选项

使用 MINVALUE 选项指定序列中值的新下限。最小值(或 min)必须是 INT8 范围内的整数,它小于 sequence.CURRVAL 和 restart (或者,如果未指定 restart ,则小于原 CREATE SEQUENCE 语句中的 origin )。

使用 NOMINVALUE 选项以用缺省值(对于递增顺序为 1;对于递减顺序为 -(2e64))替换当前下限。

CYCLE 或 NOCYCLE 选项

使用 CYCLE 选项替换 NOCYCLE 属性,在序列到达最大(升序)或最小(降序)限制值后继续生产序列值。在递增顺序到达 max 后,它为下一个值生产min 值。在递减顺序到达 min 后,它为下一个值生产 max 值。

使用 NOCYCLE 选项可防止序列在到达声明的限制值之后生成更多的值。一旦序列到达该限制值,对 sequence.NEXTVAL 的下一次引用将返回一条错误消息。

CACHE 或 NOCACHE 选项

使用 CACHE 选项指定在内存中预分配以快速访问的序列值的新数目。高速缓存大小必须是在 INT 范围内的整数,它小于循环中的个数(或小于 (|max - min)/step|)。最小大小为 2 个预分配的值。

使用 NOCACHE 在内存中不预分配值。(另见 CREATE SEQUENCE 语句 中有关 SEQ_CACHE_SIZE 的描述。) 

ORDER 或 NOORDER 选项

这些关键字对序列的行为没有影响。序列始终以用户请求的顺序向用户发出值,就像 ORDER 关键字是始终指定的一样。但是,ALTER SEQUENCE 语句接受 ORDER 和 NOORDER 关键字,以同在 SQL 的其它方言中序列对象的实现相兼容。

以上,通过本文的详细介绍,您应能全面掌握GBase 8s中序列的修改方法。合理地调整序列参数,不仅可以优化数据库性能,还可以提高数据管理的灵活性。我们希望本文能帮助您更有效地使用GBase 8s的序列功能,为您的数据库管理提供强有力的支持。

原文链接:https://www.gbase.cn/community/post/4210
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值