关于oracle的自动递增,一般依靠序列来产生。当然没SQL SERVICE 2005那样两粒简单的关键字就吃定。
创建序列的语法:
CREATE SEQUENCE 序列名
[INCREMENT BY n]  --增长量,默认为1,负值为减量
[START WITH n]  ---初始值 ,默认为1
[{MAXVALUE/ MINVALUE n|NOMAXVALUE}]--最大值,最小值,默认不规定最大最小值
[{CYCLE|NOCYCLE}]--达到最大值循环或不循环
[{CACHE n|NOCACHE}]; --缓冲,爱理不理的。

个人认为以下三个选项少用 :

[{MAXVALUE/ MINVALUE n|NOMAXVALUE}]

[{CYCLE|NOCYCLE}]

[{CACHE n|NOCACHE}];

不管你信不信,反正我信了,我就是没曾用过。

创建一张测试表:

 

 
  
  1. SQL> create table testseq(  
  2.   2  next number,  
  3.   3  curr number  
  4.   4  );  
  5.    
  6. Table created 

(1)最常用的,最简单的序列:

 

 
  
  1. SQL> create sequence myseq;  
  2.    
  3. Sequence created 

   插入五条数据测试:

 

 
  
  1. SQL> insert into testseq values(myseq.nextval,myseq.currval);  
  2.    
  3. 1 row inserted  
  4. SQL> insert into testseq values(myseq.nextval,myseq.currval);  
  5.    
  6. 1 row inserted  
  7. SQL> insert into testseq values(myseq.nextval,myseq.currval);  
  8.    
  9. 1 row inserted  
  10. SQL> insert into testseq values(myseq.nextval,myseq.currval);  
  11.    
  12. 1 row inserted  
  13. SQL> insert into testseq values(myseq.nextval,myseq.currval);  
  14.    
  15. 1 row inserted  
  16.    
  17. SQL> select * from testseq;  
  18.    
  19.       NEXT       CURR  
  20. ---------- ----------  
  21.          1          1  
  22.          2          2  
  23.          3          3  
  24.          4          4  
  25.          5          5  

(2)改变增量的序列

 

 
  
  1. SQL> drop sequence myseq;  
  2.    
  3. Sequence dropped  
  4. SQL> delete from testseq;  
  5.    
  6. rows deleted  
  7.    
  8. SQL> create sequence myseq increment by 10;  
  9.    
  10. Sequence created  
  11.    

 插入五条数据测试:

 

 
  
  1. SQL> insert into testseq values(myseq.nextval,myseq.currval);  
  2.    
  3. 1 row inserted  
  4. SQL> insert into testseq values(myseq.nextval,myseq.currval);  
  5.    
  6. 1 row inserted  
  7. SQL> insert into testseq values(myseq.nextval,myseq.currval);  
  8.    
  9. 1 row inserted  
  10. SQL> insert into testseq values(myseq.nextval,myseq.currval);  
  11.    
  12. 1 row inserted  
  13. SQL> insert into testseq values(myseq.nextval,myseq.currval);  
  14.    
  15. 1 row inserted  
  16.    
  17. SQL> select * from testseq;  
  18.    
  19.       NEXT       CURR  
  20. ---------- ----------  
  21.          1          1  
  22.         11         11  
  23.         21         21  
  24.         31         31  
  25.         41         41  
  26.   

(3)设置初始值的序列

 

 
  
  1. SQL> drop sequence myseq;  
  2.    
  3. Sequence dropped  
  4.    
  5. SQL> delete from testseq;  
  6.    
  7. rows deleted  
  8.    
  9. SQL> create sequence myseq increment by 10 start with 25;  
  10.    
  11. Sequence created 

 插入五条数据测试:

 

 
  
  1. SQL> insert into testseq values(myseq.nextval,myseq.currval);  
  2.    
  3. 1 row inserted  
  4. SQL> insert into testseq values(myseq.nextval,myseq.currval);  
  5.    
  6. 1 row inserted  
  7. SQL> insert into testseq values(myseq.nextval,myseq.currval);  
  8.    
  9. 1 row inserted  
  10. SQL> insert into testseq values(myseq.nextval,myseq.currval);  
  11.    
  12. 1 row inserted  
  13. SQL> insert into testseq values(myseq.nextval,myseq.currval);  
  14.    
  15. 1 row inserted  
  16.    
  17. SQL> select * from testseq;  
  18.    
  19.       NEXT       CURR  
  20. ---------- ----------  
  21.         25         25  
  22.         35         35  
  23.         45         45  
  24.         55         55  
  25.         65         65  
  26.    
  27. SQL> 

(4)设置序列的最大值-----挺少用,十分少用

 

 
  
  1. SQL> drop sequence myseq;  
  2.    
  3. Sequence dropped  
  4. SQL> delete from testseq;  
  5.    
  6. rows deleted  
  7.    
  8. SQL> create sequence myseq increment by 10 start with 25 maxvalue 50;  
  9.    
  10. Sequence created  
  11.    
  12. SQL>   
  13. SQL> insert into testseq values(myseq.nextval,myseq.currval);  
  14.    
  15. 1 row inserted  
  16. SQL> insert into testseq values(myseq.nextval,myseq.currval);  
  17.    
  18. 1 row inserted  
  19. SQL> insert into testseq values(myseq.nextval,myseq.currval);  
  20.    
  21. 1 row inserted  
  22. SQL> insert into testseq values(myseq.nextval,myseq.currval);  
  23.    
  24. insert into testseq values(myseq.nextval,myseq.currval)  
  25.    
  26. ORA-08004: 序列 MYSEQ.NEXTVAL exceeds MAXVALUE 无法实例化  
  27. SQL> insert into testseq values(myseq.nextval,myseq.currval);  
  28.    
  29. insert into testseq values(myseq.nextval,myseq.currval)  
  30.    
  31. ORA-08004: 序列 MYSEQ.NEXTVAL exceeds MAXVALUE 无法实例化  
  32.  c  
  33. SQL> select * from testseq;  
  34.    
  35.       NEXT       CURR  
  36. ---------- ----------  
  37.         25         25  
  38.         35         35  
  39.         45         45  
  40.    
  41. SQL>  

你可以看出,当插入数据超过最大值的时候,就会产生错误。况且平常这种操作几乎没用,最大值设置感觉没意义。

掌握前面三个常用的序列方法就够应付平常的序列问题了。