sequence的MAXVALUE、NOMAXVALUE和CYCLE、NOCYCLE参数

简介: Oracle的sequence通常可以用来作自增列,例如主键,因为他可以自动累加并且唯一。创建sequence时有几个参数,MAXVALUE、MINVALUE、CYCLE、NOCYCLE、NOMAXVALUE等,这几个参数我们日常使用的时候可能不会太在意,但有些细节问题碰到的时候就需要明确下。

Oracle的sequence通常可以用来作自增列,例如主键,因为他可以自动累加并且唯一。创建sequence时有几个参数,MAXVALUE、MINVALUE、CYCLE、NOCYCLE、NOMAXVALUE等,这几个参数我们日常使用的时候可能不会太在意,但有些细节问题碰到的时候就需要明确下。


1、未定义NOCYCLE,默认是NOCYCLE还是CYCLE?

CREATE SEQUENCE test_seq
start with 1
increment by 1
MAXVALUE 2
cache 20;

SELECT test_seq.nextval FROM DUAL;取值为1。

SELECT test_seq.nextval FROM DUAL;取值为2。

SELECT test_seq.nextval FROM DUAL;报错:ORA-08004: sequence TEST_SEQ.NEXTVAL exceeds MAXVALUE and cannot be instantiated,说明未指定的情况下,默认是NOCYCLE


2、未定义MAXVALUE,默认是MAXVALUE还是NOMAXVALUE?

CREATE SEQUENCE tes_seq
start with 1
increment by 1
cache 20;

查看MAXVALUE取值是999999999999999999999999999,说明默认是MAXVALUE


3、MAXVALUE最大值究竟是多少?

CREATE SEQUENCE tes_seq
start with 1

maxvalue 29个9
increment by 1
cache 20;

提示:ORA-04003:sequence parameter MAXVALUE exceeds maximum size allowed (28 digits)

说明最大允许28位


创建了28位的MAXVALUE,并且设置CYCLE:

CREATE SEQUENCE test_seq 
start with 9999999999999999999999999998 
MAXVALUE 9999999999999999999999999999 
increment by 1 
CYCLE;
此时执行:SELECT test_seq. nextval FROM DUAL;,返回值是1E28,真正应是9999999999999999999999999998,
此时test_seq显示NEXT NUMBER是10000000000000000000000000000。
再执行一次SELECT test_seq. NEXTVAL FROM DUAL;,值还是1E28。但实际值是9999999999999999999999999999,下面例子可以证明,最大值是10的28次方。
再执行一次SELECT test_seq. nextval FROM DUAL;,此时值=1。,


CREATE SEQUENCE test_seq
start with 9999999999999999999999999999
MAXVALUE 10000000000000000000000000000
increment by 1
CYCLE;

SELECT test_seq. nextval FROM DUAL;返回9999999999999999999999999999,

再执行一次SELECT test_seq. nextval FROM DUAL;就会报ORA-08004错误。进一步说明最大值是28个9数字。


4、使用NOMAXVALUE就可以使用无限大值?

CREATE SEQUENCE test_seq
start with 1
NOMAXVALUE
increment by 1
cache 20;

此时test_seq显示MAX VALUE是999999999999999999999999999,27个9数字。

说明即使设置NOMAXVALUE,仍有最大值限制


结论:

MAXVALUE最大值是28个9,用科学计数法将最大值记做1E28,换句话说,即使设置NOMAXVALUE,也是有这个最大值的。

NOCYCLE是默认值。

目录
相关文章
|
SQL Java 关系型数据库
Mybatis:通过on duplicate key update实现批量插入或更新
Mybatis:通过on duplicate key update实现批量插入或更新
Mybatis:通过on duplicate key update实现批量插入或更新
|
网络安全 开发工具 git
git 出现错误:kex_exchange_identification: read: Connection reset by peer fatal
git 出现错误:kex_exchange_identification: read: Connection reset by peer fatal
git 出现错误:kex_exchange_identification: read: Connection reset by peer fatal
|
SQL 监控 数据可视化
完全开源!国内首个完全开源JAVA企业级低代码平台
随着新兴技术的快速发展,企业面临前所未有的机遇与挑战。JeeLowCode 是一款专为企业打造的 Java 企业级低代码开发平台,通过五大核心引擎和四大服务体系,简化开发流程,降低技术门槛,提高研发效率,助力企业加速数字化转型。平台支持多端适配、国际化、事件绑定等功能,广泛应用于 OA、ERP、IOT 等领域,提供强大的技术支持和灵活的解决方案。
236 5
|
SQL 安全 Java
揭秘Spring Boot安全防线:如何巧妙抵御XSS与SQL注入的双重威胁?
【8月更文挑战第29天】随着互联网技术的发展,Web应用已成为社会不可或缺的一部分。Spring Boot作为高效构建Web应用的框架备受青睐,但同时也面临安全挑战,如XSS攻击和SQL注入。本文介绍如何在Spring Boot应用中防范这两种常见安全漏洞。针对XSS攻击,可通过输入验证、输出编码及使用安全API来加强防护;对于SQL注入,则应利用预编译语句、参数化查询及最小权限原则来确保数据库安全。示例代码展示了具体实现方法,帮助开发者提升应用安全性。
1082 2
|
存储 JSON 数据安全/隐私保护
PyMuPDF 1.24.4 中文文档(十二)(2)
PyMuPDF 1.24.4 中文文档(十二)
301 0
|
11月前
|
存储 Java
Java 11 的String是如何优化存储的?
本文介绍了Java中字符串存储优化的原理和实现。通过判断字符串是否全为拉丁字符,使用`byte`代替`char`存储,以节省空间。具体实现涉及`compress`和`toBytes`方法,前者用于尝试压缩字符串,后者则按常规方式存储。代码示例展示了如何根据配置决定使用哪种存储方式。
242 1
|
开发者 iOS开发
苹果开发者账号续费流程及苹果开发者账号续费流程及下架处理
苹果开发者账号续费流程及苹果开发者账号续费流程及下架处理
|
JavaScript 前端开发
vue element-ui分页插件 始终保持在页面底部样式
vue element-ui分页插件 始终保持在页面底部样式
781 0
vue element-ui分页插件 始终保持在页面底部样式
|
存储 Python
数据包络分析(Data Envelopment Analysis, DEA)详解与Python代码示例
数据包络分析(Data Envelopment Analysis, DEA)详解与Python代码示例
|
搜索推荐 vr&ar
元宇宙(Metaverse)虚拟商城系统定制开发搭建
元宇宙(Metaverse)是一个虚拟的、共享的、持续的在线三维环境,它包括多个虚拟世界和数字空间。在元宇宙中,用户可以创建和探索虚拟世界,与其他用户互动,参与各种活动,以及体验沉浸式的数字体验。