概念
序列也称为序列生成器,能够以串行方式生成一系列整数。
序列可以在多个用户并发环境中为各个用户生成不会重复的顺序整数,而且不需要额外的I/O开销或者事务锁资源。
序列和视图一样,并不占用实际的存储空间,只是在数据字典中保存它的定义信息。
创建序列
完整语法:
CREATE SEQUENCE [ SCHEMA. ] sequence_name --schema,序列所属的模式
[ STRAT WITH start_number]
[ INCREMENT BY increment_number]
[ MINVALUE minvalue | NOMINVALUE ] --默认NOMINVALUE
[ MAXVALUE maxvalue | NOMAXVALUE] --默认NOMAXVALUE
[CYCLE | NOCYCLE] --如果是升序,达到最大值后是否从最小值开始,默认NOCYCLE
[ORDER | NOORDER] --是否按照请求次序生成序列号,默认NOORDER
[CACHE cache_number | NOCACHE]
--使用CHCHE选项时,该序列会预先生成一组序列号,保留在内存中,当使用下一个序列号时可以更快地响应,默认NOCACHE
例如:生成1-99
create sequence sequence_1
start with 1
increment by 1
minvalue 1
maxvalue 99;
使用序列
先介绍两个伪列:
- nextval 获取序列的下一个序号值
- currval 获取当前序列的序号值
例如:使用序列向emp表中插入一条信息
insert into emp(empno,deptno)
values(sequence_1.nextval,10);
查看当前序号:
select sequence_1.currval from dual;
-- dual表是ORACLE系统提供的表,包含一行,一般用于临时显示单行的查询结果
修改序列
修改序列将创建语句中的create改为alter即可
alter sequence sequence_1
increment by 2;
但是修改序列应注意以下事项:
- 不能修改起始值
- 最小值不得大于当前值
- 最大值不能小于当前值
如果要修改起始值,就必须删除序列,再重新建一个
删除序列
drop sequence sequence_1;