Oracle序列介绍

news2025/4/19 3:07:40

文章目录

  • Oracle序列介绍
    • 1. Oracle序列演进
    • 2. Oracle序列使用
    • 3. Oracle身份列(自增列)
    • 4. Oracle序列常见使用与问题

Oracle序列介绍

1. Oracle序列演进

Oracle序列(Sequence)是数据库生成唯一数值序列的对象,主要用于解决主键自增、唯一标识生成等场景。其核心原理基于内存预分配机制,通过CACHE参数提升性能,同时保障事务独立性。

  • Oracle 11g及之前:
    依赖手动创建序列+触发器实现自增主键。
  • Oracle 12c:
    引入身份列(Identity Column),简化自增列管理(详见第3节)。
  • Oracle 19c:
    支持SCALABLE序列,优化分布式数据库的序列分配效率。

2. Oracle序列使用

2.1 创建序列

-- 实例1
CREATE SEQUENCE seq_emp  
   START WITH 1000       -- 起始值  
   INCREMENT BY 1        -- 步长  
   MAXVALUE 9999         -- 最大值  
   MINVALUE 1000         -- 最小值  
   CACHE 20              -- 缓存数  
   CYCLE;                -- 循环生成
 
-- 实例2
CREATE SEQUENCE SEQ1
    START WITH 1
    INCREMENT BY 1
    NOMAXVALUE
    NOCYCLE
    CACHE 20;

参数说明:

  • start with 1 指定序列初始值为1
  • increment by 1 指定序列值每次递增1,这个值可以为负数,代表递减序列,increment by 1也是序列创建的默认设置,可以省略。
  • nomaxvalue 指定序列值没有上限(实际最大值为10^28-1,),默认设置。你也可以用maxvalue N来指定序列的最大值。
  • nocycle 指定序列到达最大值时不循环,默认设置。如果指定cycle,那么序列到达最大值后,会从头开始循环。
  • cache 20 为了提高访问速度,预先分配好并缓存在内存中的序列值个数,默认设置。如果是较繁忙的系统,可以适当的提高该值。

2.2 调用序列

  • 获取下一个值:
    INSERT INTO emp (id, name) VALUES (seq_emp.NEXTVAL, 'Alice');  
    
  • 查看当前值:
    SELECT seq_emp.CURRVAL FROM DUAL;  -- 必须先调用NEXTVAL  
    

2.3 修改与删除

  • 修改序列:
    ALTER SEQUENCE seq_emp INCREMENT BY 2;  -- 调整步长  
    
    限制:无法修改起始值(需重建序列)。
  • 删除序列:
    DROP SEQUENCE seq_emp;  
    

3. Oracle身份列(自增列)

自Oracle 12c起,身份列简化了自增字段的管理,底层仍依赖序列实现。

3.1 创建身份列

身份列定义的三种方式(其实就2种):

  • generated always:总是由系统自动生成身份列的值,如果显式给身份列赋值,则会引发异常。
  • generated by default:用户可以给身份列赋值,如果未赋值,则由系统生成身份列的值。
  • generated by default on null:为第二项定义的扩展,如果指定了on null选项,则为身份列列赋值为null时会由系统生成值。
CREATE TABLE employees (  
   id NUMBER GENERATED ALWAYS AS IDENTITY, 
   name VARCHAR2(50)  
);

CREATE TABLE employees (  
   id NUMBER GENERATED BY DEFAULT AS IDENTITY, 
   name VARCHAR2(50)  
); 

CREATE TABLE employees (  
   id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY, 
   name VARCHAR2(50)  
); 

当我们创建身份列的时候,Oracle会隐式的创建一个序列生成器(Sequence Generator SG)。既然底层也是序列,那么这个序列生成器的属性在创建时也是可以显式指定的。

create table tab3 (
id number generated always as identity (
start with 10
increment by 2
maxvalue 200
nocycle),
name varchar2(32)
);

3.2 身份列 vs 传统序列

特性身份列传统序列
作用范围仅限当前表可跨多表共享
管理复杂度自动维护需手动关联触发器
灵活性参数调整受限完全可控

4. Oracle序列常见使用与问题

  1. 序列开始值修改
-- 获取表中序列最大值
select max(id) from your_table
-- 查看当前值(需先调用NEXTVAL)
SELECT your_seq.CURRVAL FROM dual;
 
-- 调整到目标值(如改为1000)
ALTER SEQUENCE your_seq INCREMENT BY 999; -- 1000 - 当前值 
SELECT your_seq.NEXTVAL FROM dual;        -- 执行后变为1000 
ALTER SEQUENCE your_seq INCREMENT BY 1;   -- 恢复步长 
  1. 修改列为自增列
-- 确认ID字段当前属性 
SELECT column_name, data_type, identity_column
FROM all_tab_columns 
WHERE table_name = 'SSO_HOSPITAL_DUTY_INFORMATION' 
AND owner = 'SSO2';

-- 方案A:严格自增(禁止手动插入值)
ALTER TABLE SSO2.SSO_HOSPITAL_DUTY_INFORMATION 
ADD (
    NEW_ID NUMBER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1)
);
 
-- 方案B:允许手动覆盖(业务灵活性更高)
ALTER TABLE SSO2.SSO_HOSPITAL_DUTY_INFORMATION 
ADD (
    NEW_ID NUMBER GENERATED BY DEFAULT AS IDENTITY (START WITH 1)
);


-- 迁移原ID数据(如需保留历史值)
UPDATE SSO2.SSO_HOSPITAL_DUTY_INFORMATION SET NEW_ID = ID;
 
-- 删除原列并重命名(需停业务)
ALTER TABLE SSO2.SSO_HOSPITAL_DUTY_INFORMATION DROP COLUMN ID;
ALTER TABLE SSO2.SSO_HOSPITAL_DUTY_INFORMATION RENAME COLUMN NEW_ID TO ID;

-- 重新添加主键(假设原约束名为PK_HOSP_DUTY)
ALTER TABLE SSO2.SSO_HOSPITAL_DUTY_INFORMATION 
ADD CONSTRAINT PK_HOSP_DUTY PRIMARY KEY (ID);

  1. 现有身份列修改方式
-- 修改为强制模式
ALTER TABLE SSO2.SSO_HOSPITAL_DUTY_INFORMATION MODIFY (ID GENERATED ALWAYS AS IDENTITY);
-- 修改为手动模式
ALTER TABLE SSO2.SSO_HOSPITAL_DUTY_INFORMATION MODIFY (ID GENERATED BY DEFAULT AS IDENTITY);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2332800.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker的安装使用0废话版本自学软硬件工程师778天

见字如面, 这里是AIGC创意人_竹相左边 上一篇 因为 自己开发客户系统,为了解决一键启动 前端后端,涉及到了docker-compose 在新的电脑上安装docker 有各种问题这里再次记录下,既是笔记也是分享。 我先用自己的话说一遍&#xff0…

探秘 Svelte+Vite+TS+Melt - UI 框架搭建,开启高效开发

框架太“重”了:通常一个小型项目只由少数几个简单页面构成,如果使用 Vue 或者 React 这些框架来研发的话,有点“大材小用”了。构建的产物中包含了不少框架运行时代码(虚拟 DOM、响应式、状态管理等),这些代码对于小型项目而言是…

vscode 连不上 Ubuntu 18 server 的解决方案

下载 vscode 历史版本 18.5(windows请装在 系统盘 C 盘) 打开 vdcode,将 自动更新 设置为 None (很关键,否则容易前功尽弃) 重命名(删除) 服务器上的 .vscode-server 文件夹 重新…

云原生运维在 2025 年的发展蓝图

随着云计算技术的不断发展和普及,云原生已经成为了现代应用开发和运维的主流趋势。云原生运维是指在云原生环境下,对应用进行部署、监控、管理和优化的过程。在 2025 年,云原生运维将迎来更加广阔的发展前景,同时也将面临着一系列…

Redis进阶--哨兵

目录 一、引言 二、介绍 三、哨兵的核心功能 四、使用docker进行单个主机redis主从复制哨兵操作 五、哨兵重新选取主节点的流程 1.主观下线 2.客观下线 3.主节点挂了 4.挑选新主节点 六、总结 一、引言 如果主从复制中,主节点挂了,从节点会迷茫…

Franka 机器人x Dexterity Gen引领遥操作精细任务新时代

教授机器人工具灵活操作难题 在教授机器人灵活使用工具方面,目前主要有两种策略:一是人类遥控(用于模仿学习),二是模拟到现实的强化学习。然而,这两种方法均存在明显的局限性。 1、人类遥控(用…

专题|MATLAB-R语言Logistic逻辑回归增长模型在互联网金融共生及移动通信客户流失分析实例合集

全文链接:https://tecdat.cn/?p41343 作为数据科学家,我们始终关注如何通过模型创新揭示复杂系统的动态规律。本专题合集聚焦两大核心应用场景,通过 Logistic 增长模型与逻辑回归技术,为互联网金融共生演化与移动通信客户流失预警…

【学生管理系统升级版】

学生管理系统升级版 需求分析:注册功能:登录功能:验证码规则:忘记密码: 实操:系统主页面注册功能登录功能忘记密码效果演示 需求 为学生管理系统书写一个登陆、注册、忘记密码的功能。     只有用户登录成功之后&…

Web3 的云基础设施正在成型,Polkadot 2.0 用三项技术改写“上链成本”

在Web3基础设施内卷加剧的今天,“如何以更低成本、更大灵活性部署一条高性能应用链”正成为开发者们最关心的问题。而刚刚走出“技术慢热”误区的Polkadot,正在用一套名为 Polkadot 2.0 的架构升级方案,重新定义这一问题的解法。 这套升级最…

机器学习——ROC曲线、PR曲线

一、ROC曲线简介 1.1 ROC曲线的构成 1.横轴(假正率,FPR): 表示负样本被错误分类为正的比例(越小越好) 2.纵轴(真正率,TPR,即召回率): 表示正样…

我为女儿开发了一个游戏网站

大家好,我是星河。 自从协助妻子为女儿开发了算数射击游戏后,星河就一直有个想法:为女儿打造一个专属的学习游戏网站。之前的射击游戏虽然有趣,但缺乏难度分级,无法根据女儿的学习进度灵活调整。而且,仅仅…

【Spring Cloud Netflix】GateWay服务网关

1.基本概述 GateWay用于在微服务架构中提供统一的入口点,对请求进行路由,过滤和处理。它就像是整个微服务系统的大门,所有外部请求都要通过它才能访问到后端的各个微服务。 2.核心概念 2.1路由(Route) 路由是Spring Cloud gateWay中最基本…

Docker部署Jenkins服务

文章目录 1.下载Jenkins服务2.部署Java21(可选)2.1 安装Java21 3.Maven3.9.9安装4.启动Jenkins5.初始化Jenkins5.1 入门5.2 安装推荐的插件5.3 创建第一个管理员用户5.4 实例配置5.5 Jenkins已就绪5.6 开始使用Jenkins5.7 重启Jenkins 6.配置Jenkins6.1 …

[ctfshow web入门] web40

信息收集 怎么一下子多这么多过滤啊,我以为跳过了好几题 这又能eval了,但是连$也不能用了 不能用. * ?,所以打不出fla*或者fla?????了 不能用/,构造不出日志注入和伪协议包含 仔细观察,禁的是中文的括号&#x…

蓝桥杯c ++笔记(含算法 贪心+动态规划+dp+进制转化+便利等)

蓝桥杯 #include <iostream> #include <vector> #include <algorithm> #include <string> using namespace std; //常使用的头文件动态规划 小蓝在黑板上连续写下从 11 到 20232023 之间所有的整数&#xff0c;得到了一个数字序列&#xff1a; S12345…

Qt问题之 告别软件因系统默认中文输入法导致错误退出的烦恼

1. 问题 使用Qt进行研发时&#xff0c;遇到一个问题&#xff0c;当在系统默认输入法中文&#xff08;英文输入法或者搜狗就不会触发闪退&#xff09;的情况下&#xff0c;选中QTableWidget控件&#xff08;QTableWidgetItem有焦点&#xff0c;但是不双击&#xff09;&#xff…

AlDente Pro for Mac电脑 充电限制保护工具

AlDente Pro for Mac电脑 充电限制保护工具 一、介绍 AlDente Pro for Mac&#xff0c;是一款充电限制保护工具&#xff0c;是可以限制最大充电百分比来保护电池的工具。锂离子和聚合物电池&#xff08;如 MacBook 中的电池&#xff09;在40&#xff05; 至 80&#xff05; 之…

算法训练之动态规划(一)

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…

Navicat连接远程PostGreSQL失败

问题描述 使用本地Navicat连接Windows远程服务器上部署的PostGreSQL数据库时,出现以下错误: 解决方案 出现以上报错信息,是因为PostGreSQL数据库服务尚未设置允许客户端建立远程连接。可做如下配置, 1. 找到PostGreSQL数据库安装目录下的data子文件夹,重点关注:postgres…

新一代达梦官方管理工具SQLark:可视化建表操作指南

在数据库管理工作中&#xff0c;新建表是一项基础且频繁的操作。SQLark 的可视化建表功能为我们提供了一种高效、便捷且丝滑流畅的建表新体验。一起来了解下吧。 SQLark 官方下载链接&#xff1a;www.sqlark.com 新建表作为常见的功能&#xff0c;相比其他管理工具&#xff0c;…