一.概念
序列是用来生成唯一,连续的整数的数据库对象,在Oracle中没有identity约束,通常就使用序列来自动生成主键或唯一键的值.序列可以按升序排列,也可以按降序排列.
二.常用用法
1.创建序列语法:
Create sequence 序列名
[start with integer]
[increment by integer]
[maxvalue integer| nomaxvalue]
[minvalue integer| nominvalue]
[cycle | nocycle]
[cache integer | nocache];
注:
start with: 指定生成第一个序列号,对于升序列,其默认值为序列最小值;对于降序序列,其默认值为序列的最大值
increment by 用于指定序列号之间的间隔,其默认值为1,如果integer为正值,则生成的序列按升序排列,如果integer为负值,则生成的序列将按降序排列.
Maxvalue 指定序列可以生成的最大值.
Nomaxvalue 如果指定了nomaxvalue,oracle将升序序列的最大值设为1027,将降序序列的最大值设为-1.这是默认选项
Minvalue 指定序列的最小值, minvalue必须小于或等于start with的值,并且必须小于maxvalue的值
Nominvalue 如果指定了nominvalue,oracle将升序的最小值设为1,或将降序序列的最小值设为-1026.这是默认值.
Cycle 指定序列在达到最大值或最小值后,将继续从头开始生成值.
Nocycle 指定序列在达到最大值或最小值后,将不能再继续生成值.这是默认选项
Cache 使用cache选项可以预先分配一组序列号,并将其保留在内存中,这样可以更快地访问序列号.当用完缓存中的所有序列号.oracle将生成另一组数值,并将其保留在缓存中.
Nocache 不会加快访问速度而预先分配序列号,如果在创建序列时忽略了cache和nocache,orcale将默认缓存20个序列号
2.访问序列语法:
序列名.nextval 创建序列后第一次使用nextval时,将返回该序列的初始值,以后在引用nextval时,将使用increment by子句的值来增加序列值,并返回这个新值.
例如:
Insert into toys (toyed,toyname,toyprice) value(序列名.nextval,’tom’,25)
序列名.currval 返回序列的当前值,即最后一次引用nextval时返回的值
例如:
Select 序列名.currval from dual;
3.更改序列语法:
Alter sequence [用户名(模式).]序列名
[increment by integer]
[maxvalue integer| nomaxvalue]
[minvalue integer| nominvalue]
[cycle | nocycle]
[cache integer | nocache];
注:不能修改序列的start with参数,在修改序列时,应注意升序序列的最小值应小于最大值
4.删除序列语法:
drop sequence [用户名(模式).]序列名;
三.实例
--创建序列
create sequence s_emp_no
start with 1
maxvalue 99
minvalue 1
increment by 2 --序列的递增数
cycle--重复 默认不重复
cache 10 --nocache不缓存序列值
order;--有序输出
select s_emp_no.nextval from dual;
--查询当前序列
select s_emp_no.currval from dual;
--倒序列
create sequence s_emp_no
start with 99
maxvalue 99
minvalue 1
increment by -1 --序列的递增数
cycle--重复 默认不重复nocycle
cache 10 --nocache不缓存序列值
order;--有序输出
select s_emp_no.nextval from dual;
--删除序列
drop sequence s_emp_no;