Oracle数据库如何实现自增-序列Sequence介绍(适合小白)
Oracle数据库中的Sequence是一种特殊的数据库对象,可以生成一组等间隔的数值,常用于为表中的行自动生成序列号。也常用于主键自增的情况。
下面我将以小白的视角带大家介绍下Oracle数据库序列Sequence:
一、创建简单序列
创建简单序列语法:
create sequence序列名称
注意:我们在刚建立序列后,无法提取当前值,只有先提取下一个值时才能再次提取当前值。
提取下一个值: NEXTVAL返回序列的下一个值
select 序列名称.nextval from dual
提取当前值: CURRVAL返回序列的当前值
select 序列名称.currval from dual
DUAN表介绍:
DUAL表就是Oracle与数据字典自动创建的一张表,这张表是一个单行单列的表,这个表只有1列:DUMMY,数据类型为VERCHAR2(1),DUAL表中只有一个数据'X',Oracle有内部逻辑保证DUAL表中永远只有一条数据。DUAL表主要是用来选择系统变量或是求一个表达式的值。
二、创建复杂序列
创建复杂序列语法:
CREATE SEQUENCE sequence_name
[INCREMENT BY n] //递增的序列值是n如果n是正数就递增,如果是负数就递减 默认是1
[START WITH n] // 开始的值,递增默认是minvalue 递减是maxvalue
[MAXVALUE n | NOMAXVALUE] //最大值
[MINVALUE n | NOMINVALUE] //最小值
[CYCLE | NOCYCLE] // 循环/不循环
[CACHE n | NOCACHE]; //分配并存入到内存中
- sequence_name: 序列的名称。
- INCREMENT BY n: 序列每次递增的步长(默认为1)。
- START WITH n: 序列的起始值(默认为1)。
- MAXVALUE n: 序列的最大值。
- NOMAXVALUE: 指定没有最大值限制。
- MINVALUE n: 序列的最小值。
- NOMINVALUE: 指定没有最小值限制。
- CYCLE: 当达到最大值或最小值时,序列将循环(重新开始)。
- NOCYCLE: 当达到最大值或最小值时,序列将停止递增。
- CACHE n: 在内存中缓存n个序列值,以提高性能(默认为20)。
- NOCACHE: 不在内存中缓存序列值。
三、创建序列,使用主键自增案例
3.1 创建序列
创建一个序列名为USER_SEQUENCE,开始值为1,每次递增1,最大值为999999999999999999999999,不循环,不缓存的序列。
CREATE SEQUENCE USER_SEQUENCESTART WITH 1INCREMENT BY 1MAXVALUE 999999999999999999999999NOCACHENOCYCLE;
3.2 应用Sequence
Sequence生成的唯一值可以在INSERT语句中使用。例如:
INSERT INTO table_name (id, name)
VALUES (USER_SEQUENCE.NEXTVAL, 'John Doe');
使用sequence_name.NEXTVAL可以获取下一个Sequence值。这样就可以实现主键自增啦。
- 第一次使用
seqName.NEXTVAL返回的是序列的起始值;随后的seqName.NEXTVAL会自动增加你定义的INCREMENT BY的值,然后返回增加后的值作为序列值。 seqName.NEXTVAL初始化之后才能使用seqName.CURRVAL
3.3 查看Sequence信息
SELECT USER_SEQUENCE.CURRVAL
FROM dual;
通过sequence_name.CURRVAL可以查看当前Sequence的值。
四、修改序列
类似创建序列,不过需要注意的是,不支持修改序列起始值。
示例:
CREATE SEQUENCE USER_SEQUENCESTART WITH 1INCREMENT BY 10MAXVALUE 999999999999999999999999NOCACHENOCYCLE;
五、使用序列
一旦创建了序列,就可以使用seqName.CURRVAL,seqName.NEXTVAL来分别获取序列的当前值和下一个序列值。
可以使用序列的地方:
- INSERT的VALUES子句、子查询
- 不包含子查询、snapshot、视图的 SELECT 语句中的列表
- UPDATE中的SET子句
不可以使用序列的地方:
-
子查询、视图和实体化视图的查询
-
带DISTINCT的SELECT语句
-
带 GROUP BY和ORDER BY的SELECT语句
-
带UNION或INTERSECT或MINUS的SELECT语句
-
SELECT中的WHERE字句
-
CREATE TABLE与ALTER TABLE中的default值、check约束条件。
示例:
INSERT INTO MY_ORDER('ID', 'SEQ', 'ORDER_NO') VALUES(1, orders_seq.NEXTVAL, 'xdfkgdls20220821');
SELECT orders_seq.CURRVAL FROM DUAL;
注意:
- 第一次使用
seqName.NEXTVAL返回的是序列的起始值;随后的seqName.NEXTVAL会自动增加你定义的INCREMENT BY的值,然后返回增加后的值作为序列值。 seqName.NEXTVAL初始化之后才能使用seqName.CURRVAL
六、删除序列
DROP SEQUENCE seqName;
七、总结
Oracle数据库中的Sequence是一种特殊的数据库对象,可以生成一组等间隔的数值,常用于为表中的行自动生成序列号。Sequence和视图一样,并不占用实际的存储空间,只是在数据字典中保存它的定义信息。
Sequence的定义语法如下:
CREATE SEQUENCE [user.]sequence_name [increment by n] [start with n] [maxvalue n | nomaxvalue] [minvalue n | nominvalue];
Sequence的主要用途是生成表的主键值,也可以在插入语句中引用,或通过查询检查当前值,或使序列增至下一个值。
Oracle数据库中的Sequence是一种非常有用的数据库对象,它可以帮助生成一组等间隔的数值,并且常常被用于为表中的行自动生成序列号。以下是关于Oracle数据库序列的详细总结:
-
定义和使用:
- Sequence的定义是通过
CREATE SEQUENCE语句完成的。在定义时,需要指定一个唯一的名称(sequence_name)以及一些可选的参数。 INCREMENT BY指定了序列的增量值。默认情况下,序列会每次增加1。START WITH指定了序列的起始值。默认情况下,序列会从最小的可能值开始。MAXVALUE和MINVALUE分别指定了序列的最大值和最小值。如果未指定,则最大值和最小值会根据序列的增量和当前值自动计算。
- Sequence的定义是通过
-
主要用途:
- 生成主键值:由于Sequence可以生成唯一的数值序列,因此常常被用于生成表的主键值。通过将Sequence与表的主键列关联,可以确保每个行都有一个唯一的主键值。
- 插入语句引用:在插入数据时,可以使用Sequence的当前值作为表中的某些列的值。这样可以避免手动指定值,并确保数据的顺序性。
- 查询当前值:通过查询Sequence的当前值,可以了解下一个将被生成的值。这有助于在需要时进行适当的操作,例如在插入数据之前获取主键值。
-
内置函数:
- Sequence还提供了一些内置函数,可以用于查询和控制Sequence的行为。例如,
NEXTVAL函数用于获取下一个序列值,CURRVAL函数用于获取当前序列值,NEXT NUMBERS函数用于获取指定数量的连续序列值。
- Sequence还提供了一些内置函数,可以用于查询和控制Sequence的行为。例如,
-
注意事项:
- Sequence是数据库对象,因此不占用实际的存储空间。它们只是在数据字典中保存定义信息。
- Sequence可以由多个用户并发使用,但每个用户只能获取一次Sequence的下一个值。如果需要确保并发访问时的唯一性,可以使用数据库锁或其他机制来控制并发访问。
- Sequence的最大值和最小值是可选的,但如果指定了最大值或最小值,则它们应该足够大或小以容纳所有可能的序列值。否则,如果超过了最大值或最小值,Sequence将停止生成新的值。
-
总结:
Oracle数据库中的Sequence是一种非常方便且实用的数据库对象,它可以生成一组等间隔的数值序列,常被用于为表中的行自动生成主键值等唯一标识符。通过了解Sequence的定义、使用、主要用途、内置函数以及注意事项,开发人员可以更好地利用Sequence来简化数据库操作和管理。
相关文章:
Oracle数据库如何实现自增-序列Sequence介绍(适合小白)
Oracle数据库中的Sequence是一种特殊的数据库对象,可以生成一组等间隔的数值,常用于为表中的行自动生成序列号。也常用于主键自增的情况。 下面我将以小白的视角带大家介绍下Oracle数据库序列Sequence: 一、创建简单序列 创建简单序列语法…...
ke14--10章-2JDBC例子
驱动forName,创建连接对象getConnection要三个参数,执行String sql "INSERT INTO等",创建执行SQL语句的PreparedStatement对象进行setString,然后执行preStmt.executeUpdate(); 为什么要preStmt conn.prepareStatement(sql);conn DriverManager.getConnection(url…...
04数据平台Flume
Flume 功能 Flume主要作用,就是实时读取服务器本地磁盘数据,将数据写入到 HDFS。 Flume是 Cloudera提供的高可用,高可靠性,分布式的海量日志采集、聚合和传输的系统工具。 Flume 架构 Flume组成架构如下图所示: A…...
Redis--13--缓存一致性问题
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 缓存一致性问题1、先更新缓存,再更新DB方案二:先更新DB,再更新缓存方案三:先删缓存,再写数据库推荐1&…...
12.7作业
1. #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//***********窗口相关设置***********//设置窗体大小this->resize(540,410);this->setFixedSize(540,410);//取消菜单栏this->setWindowFlag(Qt::FramelessWindowHint);/…...
ssl什么是公钥和私钥?
公钥(Public Key)与私钥(Private Key)是通过加密算法得到的一个密钥对(即一个公钥和一个私钥,也就是非对称加密方式)。公钥可对会话进行加密、验证数字签名,只有使用对应的私钥才能解…...
github首次将文件合到远端分支,发现名字不是master,而是main
其中,暂存区和本地仓库的信息都存储在.git目录中 在自己的github上实践 1、刚开始,git clone gitgithub.com:lingze8678/my_github.git到本地 2、在克隆后的代码中加入一个pdf文件 3、在git bash中操作(当项目中有文件更改和删除ÿ…...
RTX 40 系彻底摆烂,NVIDIA 让三年老卡焕发第二春
AMD 前段时间发布的 RX 6750GRE 12/10G 两块新卡属实给了市场一波小小震撼。 有同学要说了,这不就是两年前的 RX 6700 系换皮嘛,典型的旧饭重恰它凭啥能火? 无他,性能合格,价格实惠,主打一个高性价比。 别…...
ELK技术栈介绍及简单使用实例
1. ELK技术栈介绍 引言 在当今数据驱动的世界里,有效地管理和分析大量日志数据变得至关重要。这里我们将深入探讨ELK技术栈,这是一种流行的日志管理解决方案,它结合了三个开源项目:Elasticsearch、Logstash和Kibana。ELK技术栈因…...
基于Java健身房课程管理系统
基于Java健身房课程管理系统 功能需求 1、课程信息管理:系统需要能够记录和管理所有课程的详细信息,包括课程名称、教练信息、课程时间、课程地点、课程容量等。管理员和教练可以添加、编辑和删除课程信息。 2、会员信息管理:系统需要能够…...
DAPP开发【02】Remix使用
系列文章目录 系列文章在DAPP开发专栏 文章目录 系列文章目录使用部署测试网上本地项目连接remix本地项目连接remix 使用 创建一个新的工作空间 部署测试网上 利用metaMask连接测试网络 添加成功,添加时需要签名 即可进行编译 即可部署 本地项目连接remix 方…...
大华DSS S2-045 OGNL表达式注入漏洞复现
0x01 产品简介 大华DSS安防监控系统平台是一款集视频、报警、存储、管理于一体的综合安防解决方案。该平台支持多种接入方式,包括网络视频、模拟视频、数字视频、IP电话、对讲机等。此外,该平台还支持多种报警方式,包括移动侦测、区域入侵、越线报警、人员聚集等。 0x02 漏…...
大数据之HBase(二)
Master详细架构 位置:namenode实现类:HMaster组成 负载均衡器:通过meta了解region的分配,通过zk了解rs的启动情况,5分钟调控一次分配平衡元数据表管理器:管理自己的预写日志,如果宕机ÿ…...
前后端数据传输格式(下)
作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 上篇主要复习了HTTP以及…...
mysql pxc高可用离线部署(三)
pxc学习流程 mysql pxc高可用 单主机 多主机部署(一) mysql pxc 高可用多主机离线部署(二) mysql pxc高可用离线部署(三) mysql pxc高可用 跨主机部署pxc 本文使用docker进行安装,主机间通过…...
XXL-JOB 日志表和日志文件自动清理
🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…...
常用sql记录
备份一张表 PostgreSQL CREATE TABLE new_table AS SELECT * FROM old_table;-- 下面这个比上面好,这个复制表结构时,会把默认值、约束、注释都复制 CREATE TABLE new_table (LIKE old_table INCLUDING ALL) WITHOUT OIDS; INSERT INTO new_table SELE…...
设备温度和振动综合监测:温振一体式传感器的优点和应用
随着工业设备的复杂性和自动化程度的提高,对设备状态监测的需求也日益增加。温振一体式传感器作为一种集振动和温度监测于一体的传感器,具备多项优势,因此在工业设备状态监测领域得到广泛应用。 温振一体式传感器基于振动传感器和温度传感器的…...
彻底解决ModuleNotFoundError: No module named ‘exceptions‘【Bug完美解决】
文章目录 项目场景:问题描述原因分析:解决方案:此Bug解决方案总结心得项目场景: 根据本文可找到bug原因并彻底解决**ModuleNotFoundError: No module named ‘exceptions‘**Bug 报错: E:\Anconda\python.exe c:\Users\24190\PycharmProjects\pythonProject4py尝试 gong…...
yarn和npm的区别
2023-12-8 yarn和npm的区别 是常用的包管理工具,用于node.js项目中安装、管理、和更新依赖项 有以下几个区别: 性能和速度:在包的安装和下载方面,yarn比npm更快速,yarn通过并行下载和缓存等优化策略,可以…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
