Oracle Sequence创建与使用

最近几天使用Oracle的sequence序列号,发现对如何创建、修改、使用存在很多迷茫点,在上网寻找答案后,根据各路大神的总结,汇总下对自己的学习成果;

在Oracle中sequence就是序号,每次提取完都会自动增加,步幅固定,它与表没有直接关系


创建sequence语句:

CREATE SEQUENCE seq_name-- seq_name为计数器的名字,自定;
INCREMENT 
BY 1 -- 每次加幅度:1,2,3,....;
START WITH 1 -- 起始序号,以实际生产情况而定;
NOMAXvalue -- 不设置最大值,或设定最大值: maxvalue 9999;
NOCYCLE -- 一直累加,不循环; 或循环使用 cycle ;
CACHE 10--设置缓存序列个数,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE


修改sequence:

Alter sequence 可以修改sequence(除起始值)步幅、最大/最小值、是否循环、缓存个数 这些参数;

例:Alter Sequence seq_name  

Increment  By  2 

Maxvalue 9999

Cycle

Cache 5;

需要修改sequence的起始值,则需要删除原有sequence,re-create重新创建;


应用sequence:

sequence创建完成后,就可以使用sequence的两个参数 currval、nextval;

currval查询sequence的当前值:select seq_name.currval from dual;

nextval查询sequence下一个值:select seq_name.nextval from dual;

例:对某一张表使用:insert into tb_name(id,name) values(seq_name.nextval,'下一个计数');


删除sequence :

drop sequence seq_name;


注:

1、currval是取当前值,所以一个新的计数器sequence必须先使用nextval后才可以使用currval否则会报错;

2、nextval是取下一个值,但第一次使用时取的是初始值,之后正常取下一个,且如果一个语句(不同的子句)里面有多个nextval,它们的取值可能是不同的;

3、如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,cache里面的取完后,oracle自动再取一组到cache。 

      优点:存取的快些,尤其是并发访问时。

      缺点:使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在创建的时候用nocache防止这种情况。

猜你喜欢

转载自blog.csdn.net/karloo/article/details/51423340