Oracle 11g学习笔记–序列
序列是一种数据项,它生成一个整数序列,那么序列是用来做什么的呢?序列生成的整数通常可以用来填充数字类型的的主键列;
创建序列
create sequence sequence_name --创建名为sequence_name的序列
[start with start_num] --指定开始整数,默认为1
[increment by increament_num]--指定增量,默认为1
[{maxvalue maximum_num | nomaxvalue}]--指定最大值,当为nomaxvalue时,升序最大值为10的27次方,默认为此,降序最大值为-1
[{minvalue minimum_num | nominvalue}]--指定最小值,nominvalue默认值,升序最小值为1,降序最小值为-10的26次方
[{cycle | nocycle}]指定该序列即使已经达到最大或者细小值也继续生成整数,当升序序列达到最大值是,下一个值为最小值,降序反之。若为nocycle则不会循环,即不会继续生成
[{cache cache_num | nocache}]--指定保存在内存中整数的个数,默认为20个,nocahe指定不缓存任何整数,可以避免产生不连续的序列,但会降低性能;
[{order | noorder}];--确保按照请求次序生成整数,默认为noorder
从数据字典获取有关序列的信息
可以从视图user_sequences视图中获取有关序列信息;
select
sequence_name,
min_value,
max_value,
increment_by,
cycle_flag,
order_flag,
order_flag,
cache_size,
last_number--该序列生成或缓存的最后一个数字
from
user_sequences;
使用序列
说了许多,但是最重要的是我们要知道如何使用序列!
序列生成一系列数字,一个序列包含两个‘伪列’,分别为currval和nextval,可以分别用来获取该序列的当前值和下一个值;
select s_test.nextval from dual;
select s_test.currval;
select s_test.nextval, s_test.currval from dual;
注意,第一次使用时,必须调用nextval初始化,然后就可以使用了,此时每调用nexval,序列都会加相应的增量,可通过currval获取当前的序列值;
在开始我们说了,序列通常用来生成主键,例:
--创建表
create table table_name (
id integer constraint id_error primary key);
--用序列填充表
insert into table_name values(
s_test.nextval);
修改序列
修改内容有如下限制:
●不能修改序列的初值
●修改的最小值不能大于当前值
●修改的最大值不能小于当前值
ALTER SEQUENCE emp_sequence
INCREMENT BY 10
MAXVALUE 10000
CYCLE -- 到10000后从头开始
NOCACHE ;
删除序列
drop sequence s_test;