ORACLE —序列
定义:
序列是ORACLE提供的一组能够自动增长的序号。常常用来生成每条数据的唯一标识。
权限要求:CREATE SEQUENCE
创建语法:
CREATE SEQUENCE 序列名称 SEQ_NAME
START WITH N
--初始序号 递增:默认MINVALUE 递减:默认MAXVALUE
INCREMENT BY N
--增长幅度 N为正 递增 N为负 递减
MINVALUE N | NOMINVALUE
--最小值 N | 无最小值设置
MAXVALUE N | NOMAXVALUE
--最大值 N | 无最大值设置
CACHE N | NOCACHE
--缓存 N个序号 | 无缓存 默认缓存20个序号 --尽量设置大一点的值
CYCLE | NOCYCLE ;--循环 达到极值时是否从新循环生成序号
tips:
循环序列在创建时,缓存值限定在:
CEIL((MAXVALUE-MINVALUE)/ABS(INCREMENT))以内,
非循环序列缓存值设定没有限定,但实际缓存受所剩序列号影响。
举例;
CREATE SEQUENCE SEQ_A
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 20
CACHE 10
NOCYCLE;
值当前值
:CURRVAL
下一个值
:NEXTVAL
注意:
1)第一次使用CURRVAL必须先使用一次NEXTVAL
2)第一次使用NEXTVAL得到的是序列中的起始值
修改
语法:
ALTER SEQUENCE SEQ_NAME CYCLE; --修改循环
ALTER SEQUENCE SEQ_NAME INCREMENT BY 3; --修改涨幅
注意:
无法直接调整初始值,只能删除后重建,或先设置一个新的涨幅,通过nextval执行到目标序号后再调回旧的涨幅。
删除
语法:
DROP SEQUENCE SEQ_NAME;
tips:
1.CACHE值小于等于CYCLE值(指一次循环能够生成的序号个数)
2.未设置起始值时,默认递增序列从最小值开始,递减序列从最大值开始
3.涨幅必须是非零整数
4.若要指定起始值,起始值必须在最小值与最大值之间
5.若未指定最大值和最小值 递增时:最小值是1 最大值是10^27 递减时:最小值是-10^27 最大值是 -1
6.ABS(INCREMNET)<=ABS(MAXVALUE-MINVALUE)
7.缓存值尽量设置大一些