SQL------SEQUENCE

转自:http://blog.csdn.net/gameloft9/article/details/20902805

一、概述

sequence是序列号的意思,每次取的时候它会自动增加。sequence与表没有从属关系,与表一样属于用户。 二、主要内容 1、Create Sequence语法 --首先用户要有CREATE SEQUENCE或者CREATE ANY SEQUENCE的权限。 CREATE SEQUENCE seqname [ INCREMENT increment ]     [ MINVALUE minvalue ] [ MAXVALUE maxvalue ]     [ START start ] [ CACHE cache ] [ CYCLE ][order]

 seqname:       序列名  increment:     递增数,例如increment by 1就是递增1;increment by -1就是递减1。  minvalue:      序列最小值  maxvalue:      序列最大值,最大为27个9.  start:         序列从哪个值开始,例如start with 200就是从200开始。  cache:         缓存序列个数,先取一部分序列值存入缓存,可以提高性能。缺点是发生系统故障后可能导致                 序列号不连续。可以设置为nocache保证不会发生序列跳动。默认值是20。  cycle:        循环,到达最大值后,从最小值重新开始生成序列号。可以设置为nocycle表示累加不循环。  order:         保证按顺序申请。默认是noorder。ORDER 和 NOORDER 的区别表现在 并行服务 和独占服务之间 打个比方:双CPU对同一个oracle DB 中的 ABC sequence申请序号时, 这时就有两个请求A和B,假设A请求在前B在后, 现在ABC序列中的值为9. 如果添加了ORDER选项,那么一定是A请求到9, B请求到10.但如果没有添加此选项,则有可能B请求到9, A请求到10.order一般用于时间戳类型,对于主键则用处不大。 例子:      CREATE SEQUENCE seq      minvalue 1        --最小值      INCREMENT BY 1    --递增1      START WITH 1      --从1开始      NOMAXvalue        --无最大值      NOCYCLE           --不循环      CACHE 100;        --缓存100个序列号

2、使用sequence 定义好sequence后,你就可以用currVal,nextVal取得值。 CurrVal:返回 sequence的当前值 NextVal:返回sequence的下一个值 select seq.currval from dual select seq.nextval from dual   3.在Sql语句中可以使用sequence的地方: (1)不包含子查询、snapshot、VIEW的 SELECT 语句 (2)INSERT语句的子查询中

(3)INSERT语句的values中 (4)UPDATE 的 SET中 例如: insert into student(id,name) values(seq.Nextval,'jack');

注意:      第一次NEXTVAL返回的是初始值,随后的NEXTVAL会返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则报如下错误:     ORA-08002 序列currval尚未在会话中定义。

使用一次NEXTVAL会增加一次 SEQUENCE的值,所以如果你多次执行包含NEXTVAL的一条语句,其值就是不一样的。   3、修改sequence参数   拥有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop sequence再create。   例: alter sequence SEQ maxvalue 9999999; alter sequence SEQ cache 10;   4、Drop Sequence DROP SEQUENCE seq;

posted @ 2018-11-13 16:51  kennyael  阅读(1208)  评论(0编辑  收藏  举报