序列(sequence)
在oracle 数据库中,没有自动增长列。
创建序列:
最基本的要求记下“create seqence 名称”
create sequence myseq
创建之后,可以运用数据字典查询
select * from user_sequences;
显示当前的序列值:
select myseq.currval from dual
每次调用都会显示下一个值:
select myseq.nextval from dual
对于序列之中缓存是一个非常重要的概念,就是说在序列使用之前,已经在内存里面为用户提供好了一系列的生成的序列号,
用的时候不是说随用随取,而是已经准备好了。
如果设置了缓存,那么数据库出现了问题,有可能会跳号。
那序列最终的目的是生成自动增长列,
删除序列:
drop sequence myseq;
特殊功能序列:
步长1.每次步长为1
create sequence myseq increment by 3;
select * from user_sequences;
select myseq.nextval from dual
初始值是从1开始的,每次增长3.
如果要从30开始
drop sequence myseq
create sequence myseq increment by 3
start with 30;
缓存操作:
可以设置也可以不设置。
drop sequence myseq
缓存:
create sequence myseq cache;
不缓存:
create sequence myseq nocache;
现在希望序列在一个数值范围内循环:1,3,5,7,9.
create sequence myseq
start with 1
increment by 2
maxvalue 10
minvalue 1
cycle
cache 3 ;
select myseq.nextval from dual
修改序列:
drop sequence myseq
create sequence myseq
alter sequence myseq
increment by 10
maxvalue 98765
cache 100
对象修改不用特别关注。
oracle 12c就有自动序列。
drop table member purge;
create table member(
mid number generated by default as identity (start with 1 increment by 1),
name varchar2(20) not null,
constraint pk_mid primary key(mid)
)