1.序列的作用及创建
许多的数据库之中都会为用户提供一种自动增长列的操作,
例如:在微软的access数据库中就提供了一种自动编号的增长列。
序列可以自动的按照即定的规则实现数据的编号操作。
但是在oracle中没有提供这样的自动增长列,都是手工替代。
序列的创建语法:序列属于oracle的对象,所以对象的创建依然是create
create sequence 序列名称
[increment by 步长]
[start with 开始值]
[maxvalue 最大值|nomaxvalue]
[minvalue 最小值|nominvalue]
[cycle|nocycle]
[cache缓存大小|nocache];
范例:创建序列(默认序列最小值是1,最大值无限大)
create sequence myseq;
查询数据字典--user_sequences
select * from user_sequences;
使用序列:
要使用一个已创建完成的序列,则可以使用序列中提供的两个伪列进行操作:
序列名称.currval:表示取得当前序列已经增长的结果,重复调用多次后序列内容
不会有任何变化,同时当前序列的大小(last_number)不会变化;
序列名称.nextval:表示取得一个序列的下一个增长值,每调用一次,序列都会自动增长;
注意:对于给出的伪列,一定要先使用nextval,而后才可以使用currval,也就是只有在执行了
nextval之后序列才真正进入到可用状态。
范例:观察伪列的使用
select myseq.nextval from dual;
select myseq.currval from dual;
序列的最终目的是生成自动增长列,这个情况就必须结合表去使用;
范例:创建数据表
drop table member purge;
create table member(
id number,
name varchar2(50) not null,
constraint pk_id primary key(id)
)
插入数据:
insert into member (id,name)values(myseq.nextval,'King');
2.删除序列
drop sequence 序列名;
3.创建特殊功能的序列
范例:设置新的步长为3
drop sequence myseq;
create sequence myseq increment by 3;
select myseq.nextval from dual;
范例:修改默认初始值
drop sequence myseq;
create sequence myseq start with 30;
select myseq.nextval from dual;
范例:设置缓存
drop sequence myseq;
create sequence myseq
cache 100;
select * from user_sequences;
范例:创建循环序列,让序列内容在1,3,5,7,9之间循环
drop sequence myseq;
create sequence myseq
start with 1
increment by 2
maxvalue 10
minvalue 1
cycle
cache 3;
select myseq.nextval from dual;
4.修改序列
序列本身也属于一个数据库对象,而只要是数据库的对象,那么在创建之后都可以对其进行修改,
语法如下:
alter sequence 序列名称
[increment by 步长]
[maxvalue 最大值|nomaxvalue]
[minvalue 最小值|nominvalue]
[cycle|nocycle]
[cache缓存大小|nocache];
5.自动序列
从oracle 12C起,为了方便用户生成数据表的流水编号,所以提供了类似与db2或mysql那样的
自动增长列,而这中国自动增长列实际上也是一个序列,只是这个序列对象的定义由oracle自己
控制的。
oracle的自动增长序列,需要在定义列的时候进行设置,而设置的语法如下
create table 表名称(
列名称 类型 generated by default as identity(
[increment by 步长]
[start with 开始值]
[maxvalue 最大值|nomaxvalue]
[minvalue 最小值|nominvalue]
[cycle|nocycle]
[cache缓存大小|nocache]),
列名称 类型...
)
使用自动增长列
drop table member purge;
create table member(
id number generated by default as identity(start with 1 increment by 1),
name varchar2(50) not null,
constraint pk_id primary key(id)
)
自动的序列在表彻底删除之后会自动回收。
阅读(1223) | 评论(0) | 转发(0) |