ITPub博客

首页 > 数据库 > Oracle > Oracle数据库开发——序列

Oracle数据库开发——序列

原创 Oracle 作者:呆呆笨笨的鱼 时间:2014-04-22 11:46:31 0 删除 编辑
<序列 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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-04-17

  • 博文量
    62
  • 访问量
    939480