序列(sequence) 是Oracle提供的用于生成一系列唯一数字的数据库对象。它会自动生成顺序递增或者递减的序列号,以实现自动提供唯一的主键值。序列可以在多用户并发环境中使用,并且可以为所有用户生成不重复的顺序数字,而不需要任何额外的I/O开销。
序列创建的语法:
create sequence <seq_name>
[start with n]
[increment by n]
[minvalue n|nominvalue]
[maxvalue n|nomaxvalue]
[cache n|nocache]
[cycle|nocycle]
[order|noorder]
seq_name: 序列名
start: 指定序列开始位置 n
increment by: 表示序列的增量,正数生成一个递增序列,负数生成一个递减序列,默认值为1.
minvalue: 序列的最小值
maxvalue: 序列的最大值
cache: 决定是否是否产生序列号分配,并存储在内存中
cycle: 当序列达到最大值或者最小值,可以复位并继续下去,如果达到极限则生成的下一个数为最小值或者最大值,如果为nocycle,达到最大值或者最小值,试图获取下一个值时报错
order: 保证生成的序列是按顺序产生的
实例:
create sequence seq_test_id
start with 10000
increment by 10
minvalue 1000
maxvalue 1000000
cache 50;
查看当前值与下一个值
select seq_test_id.currval, seq_test_id.nextval from dual;
使用序列 seq_test_id,注意只能用nextval,不能用currval,否则序列不会自增到下一个值
insert into t_test(id, name)
values (seq_test_id.nextval, 'latiny1');
insert into t_test(id, name)
values (seq_test_id.nextval, 'latiny2');
select *
from t_test;
修改序列
alter sequence seq_test_id
maxvalue 10000000
increment by 1000
cache 100;
insert into t_test(id, name)
values (seq_test_id.nextval, 'latiny3');
select *
from t_test;
删除序列
drop sequence seq_test_id;
查询当前用户的序列信息
select *
from user_sequences;