不同于Oracle:SEQUENCE的区别

本文比较了Oracle和GreatSQL在使用SEQUENCE时对STARTWITH参数的边界处理,指出两者都遵循MINVALUE<=STARTWITH<=MAXVALUE的原则,但Oracle存在两个特殊场景,而GreatSQL则更严格地遵守规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不同于Oracle:SEQUENCE的区别

前言

在使用Oracle数据库SEQUENCE功能时,发现Oracle对边界处理比较奇怪。刚好GreatSQL也支持SEQUENCE,就拿来一起比较一下。

先说结论:GreatSQL 的使用基本和Oracle基本一致,但是对 START WITH 的边界限制有所不同。

本次测试使用数据库的版本号

# Oracle版本
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE    11.2.0.4.0      Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

# GreatSQL版本
greatsql> \S
...
Server version:        8.0.32-25 GreatSQL, Release 25, Revision 79f57097e3f
...
1 row in set (0.00 sec)

SEQUENCE 使用介绍

SEQUENCE 有以下几个常用的参数

参数名 介绍
START WITH 起始值
INCREMENT BY 步长
MINVALUE/NOMINVALUE 最小值
MAXVALUE/NOMAXVALUE 最大值
CYCLE/NOCYCLE 是否回收
CACHE/NOCACHE (cache性能好但有丢数据的风险)

INCREMENT BY 怎么用

INCREMENT BY 的值大于0时,为递增序列

INCREMENT BY 的值小于0时,为递减序列

何时能使用NOMINVALUE &NOMINVALUE

  1. INCREMENT BY的值大于0时(递增序列),可以用NOMAXVALUE;
  2. INCREMENT BY的值小于0时(递减序列),可以用NOMINVALUE。

To create a sequence that increments without bound, for ascending sequences, omit the MAXVALUE parameter or specify NOMAXVALUE. For descending sequences, omit the MINVALUE parameter or specify the NOMINVALUE.

CYCLE/NOCYCLE

如果是CYCLE,当序列的值超出设定的范围时,会从最大值/最小值开始重新进行循环。

递增数列从最小值开始循环,递减数列从最大值开始循环。

oracle> CREATE SEQUENCE seq1
START WITH 101
minvalue 100
INCREMENT BY -10
MAXVALUE 130
nocache
 CYCLE;

#多次执行
oracle> select seq1.nextval from dual;
#返回值依次为:
101->130->120->110>100

Oracle SEQUENCE 特性

START WITH 边界

默认情况下是认为 MINVALUE <=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值