SQL------SEQUENCE

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

1、概述oracle

sequence是序列号的意思,每次取的时候它会自动增长。sequence与表没有从属关系,与表同样属于用户。 2、主要内容 一、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个序列号spa

二、使用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语句的子查询中.net

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

注意:      第一次NEXTVAL返回的是初始值,随后的NEXTVAL会返回增长后的值。CURRVAL 老是返回当前SEQUENCE的值,可是在第一次NEXTVAL初始化以后才能使用CURRVAL,不然报以下错误:     ORA-08002 序列currval还没有在会话中定义。rem

使用一次NEXTVAL会增长一次 SEQUENCE的值,因此若是你屡次执行包含NEXTVAL的一条语句,其值就是不同的。   三、修改sequence参数   拥有ALTER ANY SEQUENCE 权限才能改动sequence. 能够alter除start至之外的全部sequence参数.若是想要改变start值,必须 drop sequence再create。   例: alter sequence SEQ maxvalue 9999999; alter sequence SEQ cache 10;   四、Drop Sequence DROP SEQUENCE seq;it

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息