`

Oracle数据库中序列(SEQUENCE)的用法详解

阅读更多

Oracle数据库中序列(SEQUENCE)的用法详解

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

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

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

实例
create sequence users
minvalue 1         --定义序列生成器能产生的最小值
maxvalue 10000    --定义序列生成器能产生的最大值
start with 1880   --定义序列的初始值
increment by 1  --每次增加的值
cache 20; --(缓冲)定义存放序列的内存块的大小
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)的数值。
分享到:
评论

相关推荐

    生成oracle数据库中的所有sequence的语句

    可以根据oracle数据库中存在的sequence,生成建立语句

    Oracle数据库表序列ID自增生成器

    Oracle数据库表序列ID自增生成器的功能是为数据库中的表添加序列和触发器,以便使数据表的主键ID能够随着记录的增加而自动增加。

    Oracle sequence 重置(失效恢复)

    在Oracle数据库移植过程中,sequence可能失效,本资源可使失效的sequence重新恢复作用

    oracle基础教程

    1.3.7 序列(Sequence) 19 1.3.8 数据库链(Database Link) 20 第2章 管理ORACLE数据库 21 2.1 基本概念 21 2.1.1 数据字典 21 2.1.2 事务管理 23 2.1.3 数据库管理员(DBA) 24 2.1.4 ORACLE的四种状态 25 2.2 SQL*...

    分享ORACLE SEQUENCE跳号总结

    在ORACLE数据库中,序列(SEQUENCE)是使用非常频繁的一个数据库对象,但是有时候会遇到序列(SEQUECNE)跳号(skip sequence numbers)的情形,那么在哪些情形下会遇到跳号呢?  事务回滚引起的跳号  不管序列有...

    Oracle数据库、SQL

    1.1表是数据库中存储数据的基本单位 1 1.2数据库标准语言 1 1.3数据库(DB) 1 1.4数据库种类 1 1.5数据库中如何定义表 1 1.6 create database dbname的含义 1 1.7安装DBMS 1 1.8宏观上是数据-->database 1 1.9远程...

    oracle中的sequence实现主键增长

    教你如何使用oracle中的sequence,实现主键自动增长

    【动力节点】Oracle从入门到精通视频教程_数据库实战精讲

    数据库实战精讲本套Java视频中讲解了Oracle数据库基础、搭建Oracle数据库环境、SQL*Plus命令行工具的使用、标准SQL、Oracle数据核心-表空间、Oracle数据库常用对象,数据库性能优化,数据的导出与导入,索引,视图,...

    jfsky.com-Oracle数据库基础知识

    1.3.7 序列(Sequence) 19 1.3.8 数据库链(Database Link) 20 第2章 管理ORACLE数据库 21 2.1 基本概念 21 2.1.1 数据字典 21 2.1.2 事务管理 23 2.1.3 数据库管理员(DBA) 24 2.1.4 ORACLE的四种状态 25 2.2 SQL*...

    sequence等同于序列号

    在Oracle数据库中,sequence等同于序列号,每次取的时候sequence会自动增加,一般会作用于需要按序列号排序的地方。 1、Create Sequence (注释:你需要有CREATE SEQUENCE或CREATE ANY SEQUENCE权限) CREATE ...

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

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

    oracle中sequence介绍及应用

    oracle中sequence介绍及应用

    oracle 存储过程使用 sequence

    NULL 博文链接:https://snowelf.iteye.com/blog/575555

    通过实例了解Oracle序列Sequence使用方法

    序列(Sequence)是用来生成连续的整数数据的对象。序列常常用来作为主键中增长列, 序列中的可以升序生成,也可以降序生成。创建序列的语法是: 语法结构:创建序列 CREATE SEQUENCE sequence_name [START WITH ...

    ORACLE数据库基础知识-华为维护资料

    1.3.6 序列(Sequence) 17 1.3.7 数据库链(Database Link) 17 第2章 管理ORACLE数据库 19 2.1 启动与关闭 19 2.1.1 权限 19 2.1.2 ORACLE的四中状态 20 2.1.3 启动数据库 20 2.1.4 关闭数据库 22 2.2 应用开发...

    oracle GoldenGate 同步oracle sequence的步骤

    oracle GoldenGate 同步oracle sequence的步骤

    oracle数据库主键自增并且返回主键值

    create sequence seq_users ##创建序列seq_users increment by 1 ## 步长,每次加1 start with 1 ##从1开始 minvalue 1 ##最小值 maxvalue 9999999 ##最大值 order ##确保按照请求次序生成整数 【不常用的设置】....

    详解ORACLE SEQUENCE用法

    在oracle中sequence就是序号,每次取的时候它会自动增加。sequence与表没有关系。 1、Create Sequence 首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限。 创建语句如下: CREATE SEQUENCE seqTest INCREMENT...

    .net实现oracle数据库中获取新插入数据的id的方法

    在sql sever中实现插入数据的自动增长是很容易的,但是在oracle数据库中实现这一操作不是很容易,同时要想在.net中实现获取新插入数据的id,而且不会出现读错的情况,就更显得困难了,为了解决在oracle数据中插入的...

    oracle数据库id为uuid类型时自动生成id

    oracle数据库id为uuid类型时自动生成id的工具类,不再依赖sequence自增长

Global site tag (gtag.js) - Google Analytics