<序列 sequence>
序列是Oracle数据库中一个生成整数序号的模式对象。由序列产生的一组整数可以用作表的主键值,这个在数据库开过程中经常用到。
序列的创建语句和选项:
create sequence [schema].sequence_name
[increment by {1|n}]
[start with n]
[maxvalue n | nomaxvalue]
[minvalue n | nominvalue]
[cycle | nocycle]
[cache n | nocache]
[order | noorder];
其中:
increment by 指定序列增长的步长,默认为1。如果n是负值,则代表序列值递减。
start with 起始值,默认为1
maxvalue 指定序列最大值。nomaxvalue是默认选项,表示没有最大值。
minvalue 指定序列最小值。nominvalue是默认选项,表示没有最小值。
cycle | nocycle 指定序列在达到最大值或最小值后是否循环。
cache | nocache 指定数据库是否在内存中预分配一定数量的序列值进行缓存,预分配序列值可以加快访问速度,提高性能;
参数n的值最小是2,默认值是20;
对于循环序列,缓存的序列值数量一定要小于该序列循环的值数量,可缓存的序列值个数最多为:
cell(maxvalue - minvalue)/ ABS(increment)
例:
创建序列
SQL> create sequence emp_seq
2 start with 1000
3 increment by 1
4 minvalue 1
5 maxvalue 10000
6 nocycle
7 cache 5;
Sequence created
使用序列:序列创建后有两个属性——currval和nextval来引用序列的值,分别来获取当前值和下一个值。
SQL> select emp_seq.nextval from dual;
NEXTVAL
----------
1000
SQL> select emp_seq.currval from dual;
CURRVAL
----------
1000
序列常用于保证主键不重复
SQL> create table emp_test
2 (emp_id number(6) primary key
3 ,ename varchar2(10)
4 );
Table created
SQL> insert into emp_test values(emp_seq.nextval,'aaa');
1 row inserted
SQL> insert into emp_test values(emp_seq.nextval,'bbb');
1 row inserted
SQL> select * from emp_test;
EMP_ID ENAME
------- ----------
1002 aaa
1003 bbb
修改序列:alter sequence emp_seq incrementby 10;
注意:序列修改不能修改起始值!
SQL> alter sequence emp_seq start with 100;
alter sequence emp_seq start with 100
ORA-02283: 无法变更启动序列号
删除序列:dorp sequence emp_seq;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28929558/viewspace-1146757/
,如需转载,请注明出处,否则将追究法律责任。