- 浏览: 5551 次
- 来自: 北京
文章分类
最新评论
在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)。此时如果数据库因为维护或者其他原因需要重新启动数据库。
创建序列需要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)。此时如果数据库因为维护或者其他原因需要重新启动数据库。
发表评论
-
maven解决jar包冲突的办法
2017-11-21 10:41 1078maven解决jar包重复引入或者冲突的办法有两种: 一种是命 ... -
java 线程系列
2017-08-28 18:33 0个人个人人 -
让我为难的是挣扎的自由之程序媛逆袭之路
2017-08-28 14:20 0周末的时候看《快乐大本营》,看到其中根据食物讲故事的环节, ... -
2017/1/10
2017-01-11 10:32 288很多时候焦虑、烦躁都是因为想不清楚,目标不明确。明确现在的目标 ... -
cmd命令大全
2016-12-30 12:25 572cmd命令大全(第一部分 ... -
2016/12/29
2016-12-29 10:27 01、这个社会唯一不变的就是时时刻刻在变; 2、不谋全局者不足谋 ... -
2016/12/22
2016-12-22 20:15 0重拾对工作的热情。毕业后的热情已经被第一份工作消磨殆尽。这是个 ... -
MobaXterm Personal Edition工具 + linux搜索日志命令
2016-12-21 17:40 0一、基本的几个命令 1、文件和目录(A:注意空格问题;B示例的 ... -
2016/12/19
2016-12-19 10:23 0安稳不是件好事儿。这个岗位不能完全的发挥自己的长处。要有危机感 ... -
java基础+高级特性回顾整理
2016-12-19 10:16 0一、对象与类 二、继承 1、关键字:this/super th ... -
【转载】MyCat :开源分布式数据库中间件
2016-12-12 11:33 330原文链接:http://www.csdn.net/articl ... -
【转载/开发工具】easy-trace 代码跟踪工具
2016-12-09 18:47 414参考原文链接:http://www.open-open.com ... -
【转载】实时监控平台cat
2016-12-09 18:26 382参考链接:https://www.oschina.net/p/ ... -
2016/12/7
2016-12-07 10:41 0知识这座大山呀,知识这座大山呀,技术这条路呀,好漫长 -
2016/11/30
2016-11-30 13:45 0陷入职业生涯的瓶颈期 -
2016/11/28
2016-11-28 11:12 0我叫不生气。该适应的适应,该学习的学习。 -
2016/11/24
2016-11-24 17:12 0服务范围的 -
maven (2016/11/17转载)
2016-11-24 17:14 289一、是什么 项目管理和构建自动化工具; 大致项目结构如下: 1 ... -
2016/11/16
2016-11-16 10:36 0我有一个大致的方向,但是还是不知道怎么去实现,只能先做好眼前的 ... -
2016/11/14
2016-11-14 11:08 23512月的评级要开始了。一份努力一份收货,要开始准备了。 作为一 ...
相关推荐
在设计数据库表的时候发现Oracle没有自增主键的设置,Google了解到Oracle本身并不支持自增主键,需要通过序列(Sequence)和触发器(Trigger)实现。 创建表Student Create Table Student( id number(12) primary ...
Oracle数据库管理系统是全球广泛使用的大型关系型数据库系统之一,它在企业级数据管理和应用程序开发中扮演着核心角色。本文将深入探讨Oracle数据库管理的关键概念、应用系统开发的代码实践以及如何利用Oracle进行...
1. 安装Oracle数据库:首先确保已经安装了Oracle数据库,并创建好对应的数据库实例和用户。 2. 数据库表结构迁移:JeeSite提供了SQL脚本文件,通常在项目的`db/`目录下。你需要将MySQL的表结构脚本转换为Oracle兼容...
Oracle数据库是一种广泛使用的大型关系型数据库管理系统,它包含了许多高级特性来支持复杂的数据管理需求。在本教程的第十讲中,我们将重点讨论三个关键概念:序列(Sequence)、同义词(Synonym)和包(Package)。...
- 创建序列:CREATE SEQUENCE语句的使用方法。 - 使用序列:NEXTVAL、CURRVAL等序列操作的使用。 6. **用户、角色与权限控制**: - 用户管理:如何创建、修改、删除用户。 - 角色管理:如何创建、分配角色。 -...
通过学习和掌握这些知识,可以有效地管理和利用Oracle数据库,满足企业和组织的数据库需求。此外,随着技术的发展,Oracle数据库也在不断更新和优化,学习者应持续关注Oracle官方发布的新版本和技术文档,以保持知识...
Oracle数据库中的表、序列和触发器的创建与应用 #### 1.1 创建表空间、用户和表 - 创建表空间:使用`CREATE TABLESPACE`语句,为数据库指定表存储的逻辑区域。 - 创建用户:使用`CREATE USER`语句,并设置用户的...
在Oracle数据库中,Sequence是一种用于自动产生数值序列的对象。它可以生成连续的整数或者非连续的整数序列,并且可以根据需求进行递增或递减。Sequence常用于为表中的某列自动生成唯一的主键值或者作为流水号使用。...
本文将围绕“Oracle数据库的增删改操作”这一主题,深入探讨如何进行数据的增加(INSERT)、删除(DELETE)和修改(UPDATE),以及如何使用序列(SEQUENCE)来模拟自增ID。 首先,我们来了解一下Oracle数据库中的...
- **Oracle初始化**: 包括创建表空间、数据库用户、授权以及创建数据库实例等步骤。 #### 七、日常管理 - **启动/停止数据库**: 可以通过`sqlplus`命令行工具进行操作。 - **查看数据库状态**: 查看数据库是否正常...
以下是一些关于在Oracle中创建主键自增实例的方法和相关知识点。 1. 使用序列(Sequences): Oracle序列是一种数据库对象,可以生成唯一的整数序列。创建序列后,可以在插入新记录时引用它来获取下一个可用的序列...
### Oracle数据库中IMP导入数据详解 #### 一、引言 在Oracle数据库管理与维护过程中,数据导入是一项非常重要的操作。对于刚接触Oracle的新手来说,掌握如何使用`IMP`命令进行数据导入尤为关键。本文将详细介绍...
使用`SQL*Loader`工具可以方便地将文本数据导入到Oracle数据库中,或者将数据库中的数据导出为文本格式。 - **4.12 如何更新当前数据库日志备份方式为archive** 可以通过修改数据库的归档模式来启用归档日志模式...
在实际工作中,理解并掌握如何导出和导入Oracle序列是十分重要的,这有助于数据库维护、迁移和灾难恢复。同时,合理地设计和使用序列,可以优化数据库性能,保证数据的完整性和一致性。在进行这些操作时,应始终注意...
Oracle序列是数据库中用于生成唯一标识符的一种机制,它们在数据表中经常被用来作为主键或外键,确保数据的唯一性和完整性。在Oracle数据库系统中,序列(Sequences)提供了一种自动递增或递减数值的方式,这对于...
在这个实例中,我们将深入理解如何创建、使用和管理Oracle序列,以及如何处理序列的缓存问题。 首先,我们看到用户"SCOTT"在执行SQL命令来创建两个序列——seq_emp 和 seq_dept,它们都从1开始计数。`CREATE ...
- **Oracle Standard Edition**:适合中小企业使用,提供基本的数据库功能。 - **Oracle Enterprise Edition**:面向大型企业和高负载应用场景,提供了更多的高级特性和服务。 - **Oracle Application Server ...
在Oracle数据库中,序列(Sequences)是一种自动递增或递减的数字生成器,常用于为表的主键字段生成唯一的标识符。...在实际操作中,务必根据业务需求和安全规范来创建和使用序列,以确保数据的一致性和完整性。