炼数成金 门户 大数据 Oracle 查看内容

Oracle 中序列(Sequence)详解

2017-7-5 10:50| 发布者: 炼数成金_小数| 查看: 13529| 评论: 0|来自: ITPUB

摘要: 序列 (SEQUENCE) 是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值 (类型为数字)。不占用磁盘空间,占用内存。其主要用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值, ...

数据库 Java Hadoop Oracle 培训

一 序列定义
序列 (SEQUENCE) 是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值 (类型为数字)。不占用磁盘空间,占用内存。
其主要用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值。

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

其中:

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

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

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

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

5)  CYCLE 和 NOCYCLE 表示当序列生成器的值达到限制值后是否循环。CYCLE 代表循环,NOCYCLE 代表不循环。如果循环,则当递增序列达到较大值时,循环到最小值; 对于递减序列达到最小值时,循环到较大值。如果不循环,达到限制值后,继续产生新值就会发生错误。

6)  CACHE(缓冲) 定义存放序列的内存块的大小,默认为 20。NOCACHE 表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能。

大量语句发生请求,申请序列时,为了避免序列在运用层实现序列而引起的性能瓶颈。Oracle 序列允许将序列提前生成 cache x 个先存入内存,在发生大量申请序列语句时,可直接到运行最快的内存中去得到序列。但 cache 个数也不能设置太大,因为在数据库重启时,会清空内存信息,预存在内存中的序列会丢失,当数据库再次启动后,序列从上次内存中较大的序列号 + 1 开始存入 cache x 个。这种情况也能会在数据库关闭时也会导致序号不连续。

7)  NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用。

8)  CURRVAL 中存放序列的当前值, NEXTVAL 应在 CURRVAL 之前指定 ,二者应同时有效。
 
例子:

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

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

四、修改序列
修改序列的注意事项:
1 、必须是序列的拥有者或对序列有 ALTER any sequence 权限
2  、只有将来的序列值会被改变
3  、改变序列的初始值只能通过删除序列之后重建序列的方法实现
 
Alter sequence 示例:

ALTER SEQUENCE emp_sequence INCREMENT BY 10 MAXVALUE 10000 CYCLE -- 到 10000 后从头开始 NOCACHE ;

可以影响 Sequence 的初始化参数:

SEQUENCE_CACHE_ENTRIES = 设置能同时被 cache 的 sequence 数目。

五、查询序列
 
1  通过数据字典 USER_OBJECTS 可以查看用户拥有的序列。

2  通过数据字典 USER_SEQUENCES 可以查看序列的设置。

例:查看用户的序列:

 SELECT SEQUENCE_NAME,MIN_VALUE,MAX_VALUE,INCREMENT_BY,LAST_NUMBER FROM USER_SEQUENCES;
执行结果:
SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY LAST_NUMBER

六、删除序列
SQL>drop sequence t1_seq;

欢迎加入本站公开兴趣群
软件开发技术群
兴趣范围包括:Java,C/C++,Python,PHP,Ruby,shell等各种语言开发经验交流,各种框架使用,外包项目机会,学习、培训、跳槽等交流
QQ群:26931708

Hadoop源代码研究群
兴趣范围包括:Hadoop源代码解读,改进,优化,分布式系统场景定制,与Hadoop有关的各种开源项目,总之就是玩转Hadoop
QQ群:288410967 

鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

即将开课

热门文章

 

GMT+8, 2018-9-22 17:17 , Processed in 0.181005 second(s), 24 queries .