`

【转载】Oracle数据库中序列(SEQUENCE)的用法和实例需求

 
阅读更多
在Oracle数据库中,什么是序列呢?它的用途是什么?序列(SEQUENCE)其实是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字)。其主要的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值。

创建序列需要CREATE SEQUENCE系统权限。序列的创建语法如下:

CREATE SEQUENCE 序列名 [INCREMENT BY n] [START WITH n] [{MAXVALUE/ MINVALUE n|NOMAXVALUE}] [] [{CACHE n|NOCACHE}];

INCREMENT BY 用于定义序列的步长,如果省略,则默认为1,如果出现负值,则代表序列的值是按照此步长递减的。

START WITH 定义序列的初始值(即产生的第一个值),默认为1。

MAXVALUE 定义序列生成器能产生的最大值。选项NOMAXVALUE是默认选项,代表没有最大值定义,这时对于递增序列,系统能够产生的最大值是10的27次方;对于递减序列,最大值是-1。

MINVALUE定义序列生成器能产生的最小值。选项NOMAXVALUE是默认选项,代表没有最小值定义,这时对于递减序列,系统能够产生的最小值是?10的26次方;对于递增序列,最小值是1。

CYCLE和NOCYCLE 表示当序列生成器的值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增序列达到最大值时,循环到最小值;对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值就会发生错误。
CACHE(缓冲)定义存放序列的内存块的大小,默认为20。NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能。

删除序列的语法是:

DROP SEQUENCE 序列名;

其中:

删除序列的人应该是序列的创建者或拥有DROP ANY SEQUENCE系统权限的用户。序列一旦删除就不能被引用了。

序列的某些部分也可以在使用中进行修改,但不能修改SATRT WITH选项。对序列的修改只影响随后产生的序号,已经产生的序号不变。
修改序列的语法如下:

创建和删除序列

例1:创建序列:

CREATE SEQUENCE ABC INCREMENT BY 1 START WITH 10 MAXVALUE 9999999 NOCYCLE NOCACHE;

执行结果:

序列已创建。

步骤2:删除序列:

DROP SEQUENCE ABC;

执行结果:

序列已丢弃。

说明:以上创建的序列名为ABC,是递增序列,增量为1,初始值为10。该序列不循环,不使用内存。没有定义最小值,默认最小值为1,最大值为9 999 999。

序列的使用

如果已经创建了序列,怎样才能引用序列呢?方法是使用CURRVAL和NEXTVAL来引用序列的值。

在编号的过程中,产生间隙的原因多种多样。如果一个存储过程从一个序列中挑选某个数字,定为本地变量,但是从来不用它,这个数字就丢失了。它将不能再返回到原序列中,结果就造成数值序列中存在一个间隙。关系型数据库模型中不必担心这一点。但是有时候人们在意这一点,这些人想知道是哪些数字丢失了。

调用NEXTVAL将生成序列中的下一个序列号,调用时要指出序列名,即用以下方式调用:

序列名.NEXTVAL

CURRVAL用于产生序列的当前值,无论调用多少次都不会产生序列的下一个值。如果序列还没有通过调用NEXTVAL产生过序列的下一个值,先引用CURRVAL没有意义。调用CURRVAL的方法同上,要指出序列名,即用以下方式调用:

序列名.CURRVAL.

产生序列的值。

步骤1:产生序列的第一个值:

SELECT ABC.NEXTVAL FROM DUAL;

执行结果:

NEXTVAL ------------------ 10

步骤2:产生序列的下一个值:

SELECT ABC.NEXTVAL FROM DUAL;

执行结果:

NEXTVAL ------------------- 11

产生序列的当前值:

SELECT ABC.CURRVAL FROM DUAL;

执行结果:

CURRVAL -------------------- 11
说明:第一次调用NEXTVAL产生序列的初始值,根据定义知道初始值为10。第二次调用产生11,因为序列的步长为1。调用CURRVAL,显示当前值11,不产生新值。Oracle的解析函数为检查间隙提供了一种要快捷得多的方法。它们使你在使用完整的、面向集合的SQL处理的同时,仍然能够看到下一个行(LEAD)或者前一行(LAG)的数值。




举例分析:确保序列号的连续。
有时候,如在财务凭证编号上,系统要确保这个流水号必须是连续的。此时如果使用这个序列来作为流水号的生成机制的话,那么能否实现所有的序列号都是连续的呢?为了保证实现这个目的,那么就需要设置CACHE参数。
  CACHE这个参数主要用来指定在高速缓存中可以预先分配的序列号个数。这是什么意思呢?也就是说,如果这个数字为20的话(默认为20),那么Oracle一启动的时候就会自动生成20个序列号放在高速缓存中。当应用程序需要使用的时候,就可以马上从高速缓存中拿来使用。从而可以提高应用程序的性能。当这个20个序列号用完以后,数据库会再生成20个序列号存入到数据库的高速缓存中。很明显,这么设计就是为了提高数据库的性能。可是也会带来一个副作用。如系统在高速缓存中已经生成了20个序列号(从1991到2010)。而实际上只用了15个(如用到2005)。此时如果数据库因为维护或者其他原因需要重新启动数据库。
分享到:
评论

相关推荐

    Oracle数据库中创建自增主键的实例教程

    在设计数据库表的时候发现Oracle没有自增主键的设置,Google了解到Oracle本身并不支持自增主键,需要通过序列(Sequence)和触发器(Trigger)实现。 创建表Student Create Table Student( id number(12) primary ...

    oracle 数据库管理与应用系统开发代码

    Oracle数据库管理系统是全球广泛使用的大型关系型数据库系统之一,它在企业级数据管理和应用程序开发中扮演着核心角色。本文将深入探讨Oracle数据库管理的关键概念、应用系统开发的代码实践以及如何利用Oracle进行...

    JeeSite 默认MySql,让我们来看看如何更换为Oracle数据库

    1. 安装Oracle数据库:首先确保已经安装了Oracle数据库,并创建好对应的数据库实例和用户。 2. 数据库表结构迁移:JeeSite提供了SQL脚本文件,通常在项目的`db/`目录下。你需要将MySQL的表结构脚本转换为Oracle兼容...

    oracle 数据库实例教程 第10讲.ppt

    Oracle数据库是一种广泛使用的大型关系型数据库管理系统,它包含了许多高级特性来支持复杂的数据管理需求。在本教程的第十讲中,我们将重点讨论三个关键概念:序列(Sequence)、同义词(Synonym)和包(Package)。...

    Oracle数据库基础教程:入门其实很简单

    - 创建序列:CREATE SEQUENCE语句的使用方法。 - 使用序列:NEXTVAL、CURRVAL等序列操作的使用。 6. **用户、角色与权限控制**: - 用户管理:如何创建、修改、删除用户。 - 角色管理:如何创建、分配角色。 -...

    Oracle数据库基础知识

    通过学习和掌握这些知识,可以有效地管理和利用Oracle数据库,满足企业和组织的数据库需求。此外,随着技术的发展,Oracle数据库也在不断更新和优化,学习者应持续关注Oracle官方发布的新版本和技术文档,以保持知识...

    老二牛车在Oracle数据库上构建JAVA应用程序二理论课.pdf

    Oracle数据库中的表、序列和触发器的创建与应用 #### 1.1 创建表空间、用户和表 - 创建表空间:使用`CREATE TABLESPACE`语句,为数据库指定表存储的逻辑区域。 - 创建用户:使用`CREATE USER`语句,并设置用户的...

    oracle中sequence介绍及应用

    在Oracle数据库中,Sequence是一种用于自动产生数值序列的对象。它可以生成连续的整数或者非连续的整数序列,并且可以根据需求进行递增或递减。Sequence常用于为表中的某列自动生成唯一的主键值或者作为流水号使用。...

    关于oracle数据库的增删改操作

    本文将围绕“Oracle数据库的增删改操作”这一主题,深入探讨如何进行数据的增加(INSERT)、删除(DELETE)和修改(UPDATE),以及如何使用序列(SEQUENCE)来模拟自增ID。 首先,我们来了解一下Oracle数据库中的...

    Oracle数据库实战培训

    - **Oracle初始化**: 包括创建表空间、数据库用户、授权以及创建数据库实例等步骤。 #### 七、日常管理 - **启动/停止数据库**: 可以通过`sqlplus`命令行工具进行操作。 - **查看数据库状态**: 查看数据库是否正常...

    Oracle中主键自增实例

    以下是一些关于在Oracle中创建主键自增实例的方法和相关知识点。 1. 使用序列(Sequences): Oracle序列是一种数据库对象,可以生成唯一的整数序列。创建序列后,可以在插入新记录时引用它来获取下一个可用的序列...

    Oracle数据库中imp导入数据

    ### Oracle数据库中IMP导入数据详解 #### 一、引言 在Oracle数据库管理与维护过程中,数据导入是一项非常重要的操作。对于刚接触Oracle的新手来说,掌握如何使用`IMP`命令进行数据导入尤为关键。本文将详细介绍...

    Oracle数据库基础知识 ISSUE1.0

    使用`SQL*Loader`工具可以方便地将文本数据导入到Oracle数据库中,或者将数据库中的数据导出为文本格式。 - **4.12 如何更新当前数据库日志备份方式为archive** 可以通过修改数据库的归档模式来启用归档日志模式...

    oracle导出序列

    在实际工作中,理解并掌握如何导出和导入Oracle序列是十分重要的,这有助于数据库维护、迁移和灾难恢复。同时,合理地设计和使用序列,可以优化数据库性能,保证数据的完整性和一致性。在进行这些操作时,应始终注意...

    Oracle 序列

    Oracle序列是数据库中用于生成唯一标识符的一种机制,它们在数据表中经常被用来作为主键或外键,确保数据的唯一性和完整性。在Oracle数据库系统中,序列(Sequences)提供了一种自动递增或递减数值的方式,这对于...

    OracleSQL实例-序列的再创建实例.pdf

    在这个实例中,我们将深入理解如何创建、使用和管理Oracle序列,以及如何处理序列的缓存问题。 首先,我们看到用户"SCOTT"在执行SQL命令来创建两个序列——seq_emp 和 seq_dept,它们都从1开始计数。`CREATE ...

    Oracle 9i10g 数据库管理详细

    - **Oracle Standard Edition**:适合中小企业使用,提供基本的数据库功能。 - **Oracle Enterprise Edition**:面向大型企业和高负载应用场景,提供了更多的高级特性和服务。 - **Oracle Application Server ...

    ORACLE生成所有表对应的序列

    在Oracle数据库中,序列(Sequences)是一种自动递增或递减的数字生成器,常用于为表的主键字段生成唯一的标识符。...在实际操作中,务必根据业务需求和安全规范来创建和使用序列,以确保数据的一致性和完整性。

Global site tag (gtag.js) - Google Analytics