创建序列语法: 需要获取相应的权限
create sequence NAME
[ { INCREMENT BY | START WITH } integer ----初始值和递增间隔
| { MAXVALUE integer | NOMAXVALUE } ----上界或无上界
| { MINVALUE integer | NOMINVALUE } ----下界或无下界
| { CYCLE | NOCYCLE } ----是否循环
| { CACHE integer | NOCACHE } ----是否缓存
| {ORDER | NOORDER} ----是否排序
]
CACHE 代表是否在内存中预分配相应大小的缓存,以方便快速访问。注意 CACHE 缓存的值个数<循环体值个数 。
若系统死机或突然断电容易出现跳号现象,在创建计数器后,在内存缓存X个值,当系统崩溃后,内存中的值丢失,然而文件中任然记录了上次已经读取的值,从而造成跳号。
CYCLE 指定循环序列,超过上界或下界后,从下界或上界重新开始。
INCREMENT by 指定递增大小,可以为正或为负。
ORDER 保证序列号是因为有请求才生成的,并且按照请求的顺序生成。
使用序列的方式:
NEXTVAL 获取下一个序列值。
CURRVAL 获取最后一次NEXTVAL的序列值。
注意:初始化时,即第一次获取序列值时要使用NEXTVAL获取第一个序列值。否则会报错。
序列修改和删除语法:
ALTER SEQUENCE NAME
{ INCREMENT BY integer
| { MAXVALUE integer | NOMAXVALUE }
| { MINVALUE integer | NOMINVALUE }
| { CYCLE | NOCYCLE }
| { CACHE integer | NOCACHE }
| {ORDER | NOORDER}
} ;
DROP SEQUENCE NAME;
若要使序列start with 的值不同,则只能先删除后创建。
当使用NEXTVAL初始化时,若修改increment by, 则会产生跳号。如图:初始化应该为100,但是结果为130。
执行修改语句前:
执行修改语句后:
应用场景:
可以用在select、update、insert中。
variable seqid number
insert into t3 values(seq_tl.nextval) returning ncol into :seqid;
select * from t3 where ncol=:seqid;
返回插入行的序列值并显示插入信息。