序列: 是oacle提供的用于产生一系列唯一数字的数据库对象。
创建序列
create sequence 序列名
[START WHITH n] 初始值
[INCREMENT BY n] 设置递增步长
[MINVALUE n | NOMINVALUE] 最小值,NOMINVALUE表示无最小值
[MAXVALUE n | NOMAXVALUE] 最大值,NOMAXVALUE表示无最大值
[CYCLE | NOCYCLE] 循环
[CACHE n | NOCACHE] 内存中存储值得个数
START WHITH n 设置初始值,表示开始的值当未设置的时候,递增序列初始值为minvalue,递减序列初始值为maxvalue。
[INCREMENT BY n] 设置递增步长,n为正数表示递增,负数表示递减。
NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用。CURRVAL 中存放序列的当前值。NEXTVAL 应在 CURRVAL 之前指定 ,二者应同时有效。
[CYCLE | NOCYCLE] 循环,不循环。循环是指则当递增序列达到最大值时,循环到最小值;最小值为1。对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值就会发生错误。
cache的作用:当大量语句发生请求,申请序列时,为了避免序列在运用层实现序列而引起的性能瓶颈。Oracle序列允许将序列提前生成 cache x个先存入内存,在发生大量申请序列语句时,可直接到运行最快的内存中去得到序列。但cache只是存在缓存中,每一次重启都会重新生成。
create sequence stuno
start with 26
increment by 1
minvalue 1
nomaxvalue
nocycle
cache 20;
使用序列
CURRVAL 返回序列当前值。
NEXTVAL 返回当前序列值增加一个步长后的下一个值。
注;在创建好序列之后无法直接使用currval来返回当前值,第一次要使用nextval返回的序列的初始值:随后的nextval会自动增加定义的increment by值,且currval表示当前值。
create table seq_tab(
stuno number(10),
stuname varchar2(8)
);
insert into seq_tab values(stuno.nextval,'name1');
insert into seq_tab values(stuno.currval,'name2');
查询序列
select * from user_sequences;查看当前user的所用序列。
select * from user_sequences where sequence_name='序列名';查询某一个序列,注意序列名需要大写。
select * from user_sequences;
select * from user_sequences where sequence_name='STUNO';
删除序列
DROP SEQUENCE 序列名;
drop sequence stuno;
网友评论