一、序列的创建
create sequence [schema.]sequencename
[increment by number]
[start with number]
[maxvalue number | nomaxvalue]
[minvalue number | nominvalue]
[cycle | nocycle]
[cache number | nocache]
[order | noorder]
increment by:递增数,默认为1。
start with:起始值,默认为1。
maxvalue:最大值,默认无最大值。
minvalue:最小值,默认无最小值。
cycle/nocycle:序列到达最大或最小值后的行为,默认抛出错误,如果为cycle,则会返回起点并重复(注意返回的起点不是start with设定的值,而是从1开始)。
cache/nocache:默认cache为20。
order/noorder:用于集群环境,让各个实例协同产生序列。
二、序列的产生
利用伪列产生序列
nextval:针对全局产生的下一个值,每个会话必须先有nextval,才能有currval。
select s.nextval from dual;
currval:发送给当前会话的上一个值,并不是序列发出的上一个值,这样每个会话才能调用自己的currval值,因为这是它自己上次发出的。
select s.currval from dual;
如数据库被重启,断电等,缓存中的序列会丢失,导致序列出现间隔。
序列是全局共享的,不同的会话也将导致可能产生序列间隔。
序列产生后不能回滚。
三、序列的查询
查看用户的序列对象信息
col sequence_name for a20
select * from user_sequences;
SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY CYCLE_FLAG ORDER_FLAG CACHE_SIZE LAST_NUMBER
-------------------- ---------- ---------- ------------ ---------- ---------- ---------- -----------
S 1 1E28 1 N N 20 21
last_number就是下一个要创建的值,不包括缓存中已创建的序列。
四、序列的修改
使用alter sequence命令修改序列
alter sequence s increment by 20;
不能修改起点start with,修改不影响已经存在的序列,只影响后续序列。
默认为20的cache数量可能不够而影响性能,可以考虑增大
alter sequence s cache 100;
五、序列的删除
使用drop sequence命令删除序列
drop sequence s;
如果序列号要重置起点,只能删除重建。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28974745/viewspace-2141892/ ,如需转载,请注明出处,否则将追究法律责任。