详解Oracle数据库对象:序列相关操作

序列是一种数据库对象,用来自动产生一组唯一的序号。

序列是一种共享式的对象,多个用户可以共同使用序列中的序号。 一般将序列应用于表的主键列,这样当向表中插入数据时,主键列就使用了序列中的序号,从而保证主键列的值不会重复。 用这种方式可以代替在应用程序中产生主键值的方法,可以获得更可靠的主键值。 注:在序列指定最大值和可循环属性后,序列中的序号是可以循环使用的。

序列的创建、修改和删除

默认情况下,用户可以在自己的模式中创建序列。如果希望在其他用户的模式中创建序列, 则必须具有CREATE ANY SEQUENCE这个系统权限。

创建序列的命令为CREATE SEQUENCE,它的完整语法格式为:

CREATE SEQUENCE 序列名

INCREMENT BY n

START WITH n

MINVALUE n | NOMINVALUE

MAXVALUE n | NOMAXVALUE

CYCLE | NOCYCLE

CACHE | NOCACHE

ORDER | NOORDER

在这个命令的语法格式中,除序列名以外,其余各选项都是可选的。

各选项中的n是一个整数。

其中START WITH选项指定序列中的序号从哪个数字开始,默认情况下从它的最小值开始。 INCREMENT BY选项指定了序列中序号递增的幅度,也就是后一个序号比前一个序号大多少。 序号可以递增,也可以递减,所以INCREMENT BY选项中的数字n可以是正整数,也可以是负整数。 MAXVALUE用来指定序列中序号的最大值。

如果没有最大值,可用NOMAXVALUE选项代替这个选项。 同样, MINVALUE用来指定序列中序号的最小值,序列中的最小值必须小于或等于它的开始值。 如果为序列指定了最大值,那么当序列中的序号被悄耗完时,用户将无法从这个序列中取得序号。 选项CYCLE使得序列中的序号可以循环使用。

当用户正在使用序列中的最大值时,下一个可以使用的序号就是它的最小值。 用户每使用序列一次,都要对序列进行一次查询。

如果把序列中的序号放在内存中进行缓冲,那么用户获得序号的速度将大大加快。 选项CACHE的作用就是将序列中接下来的n个序号在内存中进行缓冲。 如果不希望进行缓冲,可以用NOCACHE选项代替它。

序列在创建之后,在使用的过程中,可以对其进行修改。

比如修改它的最大值、最小值、增幅等,但是不能修改开始值。 需要注意的是,如果已经有部分序号被使用,那么对序列的修改只影响以后的序号,对以前已经使用的序号不起作用。

修改序列的命令是ALTER SEQUENCE。

用户可以修改自己的序列,如果希望修改其他用户的序列,则需要具有ALTER ANY SEQUENCE这个系统权限。 ALTER SEQUENCE命令的用法与CREATE SEQUENCE命令的用法基本相同,只要将关键字CREATE替换为ALTER即可。

删除序列的命令是DROP SEQUENCE。

用户可以删除自己创建的序列,如果要删除其他用户的序列,则要具有DROP ANY SEQUENCE 系统权限。 序列被删除后,它的相关信息就被从数据字典中删除。

序列的使用

对用户而言,序列中的可用资源是其中包含的序号。

用户可以通过SELECT命令获得可用的序号,也可以将序号应用于DML语句和表达式中。 如果要使用其他用户的序列,则 必须具有对该序列的SELECT权限。

序列提供了两个伪列,即NEXTVAL 和CURRVAL,用来访问序列中的序号。 其中NEXTVAL代表下一个可用的序号, CURRYAL代表当前的序号。 序列可以认为是包含了一系列序号的一个指针。 序列刚被创建时,这个指针位于第一个序号之前,以后每获得一个序号,指针就向后移动一个位置,这时就可以用CURRVAL访问序列中的当前序号,用NEXTVAL访问下一个序号。

在第一次使用序列中的序号时,必须首先访问NEXTVAL伪列,使指针指向第一个序号。

通过SELECT语句可以从序列中获得一个可用的序号。

例如:

SELECT seq1.nextval FROM dual;

在SELECT语句中使用表dual是必要的,因为SELECT语句将根据表中数据的行数返回若干个序号,并且每访问一次NEXTVAL 伪列,指针就向后移动一个序号。

CURRVAL伪列代表序列中的当前序号,访问这个伪列时指针并不向后移动。

CURRVAL伪列的引用方法与NEXTVAL伪列相同,引用格式为:序列名.currval 。 序列还可应用于SELECT语句的其他形式。

例如:

SELECT seq1.nextval, empno FROM scott.emp;

在更多情况下序列的作用为表中的主键列或其他列提供一个唯一的序号。

例如:

INSERT INTO scott.dept(deptno, dname) VALUES(seq1.nextval, 'lili');

序列是一种共享式的数据库对象,用户可以直接使用自己创建的序列,其他用户也可以访问当前用户的序列,只要具有对这个序列的SELECT权限即可。 如果一个序号被某个用户获得,那么其他用户就不能再获得这个序号了。 也就是说,序列是可以共享的,但序列中的序号却是不能共享的。 对序列中序号的访问操作是作为一个单独的事务实现的,这个事务的执行与其他事务的执行成功与否无关。 如果包含一条DML语句的事务被回滚了,那么对序列的操作是无法回滚的。

注:如果是在可循环的序列中,序号可被其他用户循环使用。

在访问序列中的序号时,可能会发生序号不连续的情况,不连续的原因可能是事务发生了回滚,或者多个用户共同访问同一个序列。 一个用户要访问其他用户的序列时,不仅要具有对这个序列的SELECT权限,在访问时还要在序列的名称前以用户名进行限定。 例如:

SELECT sys.seq1.nextval FROM dual;

如果要将一个序列的SELECT权限授予其他用户,相应的GRANT命令格式为:

GRANT SELECT ON 序列名 TO 用户名;

序列信息的查询

序列作为一种数据库对象,它的相关信息也存储在数据字典中。

与序列相关的数据字典有三个: USER_SEQUENCES 、ALL SEQUENCES和DBA_SEQUENCES 。 其中数据字典USER SEQUENCES 的各列及意义如下所示:

SEQUENCE_NAME 序列名

MIN_VALUE 最小值

MAX_VALUE 最大值

INCREMENT_BY 增幅

CYCLE_FLAG 是否循环

ORDER_FLAG 是否按顺序

CACHE_SIZE 缓存大小

LAST_NUMBER 下一个可用值

注:ORDER_FLAG的解释:

Note that the ORDER option is only necessary to guarantee ordered generation if you are using Oracle with the Parallel Server option in parallel mode. If you are using exclusive mode, sequence numbers are always generated in order. LAST_NUMBER的解释:

使用的或缓存的最后一个序列号,一般大于缓冲区中的最后一个值。

LAST_NUMBER列在普通的数据库操作过程中不被更新,它在数据库的重新启动/恢复操作中使用。

CACHE_SIZE的解释:

在内存中缓存的序号用完之后,再向内存中添加序号。

例如:

SELECT order_flag, last_number,max_value,cache_size from user_sequences where sequence_name='SEQ1';

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/219577.html<

(0)
运维的头像运维
上一篇2025-04-14 04:27
下一篇 2025-04-14 04:28

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注