Oracle之序列(主键自增)


1.

在Oracle中完成自动增长的功能,则只能依靠序列完成,所有的自动增长操作,需要用户收工完成处理。

序列的创建格式:

  1. CREATE SEQUENCE sequence  
  2. [INCREMENT BY n][STARTWITH n]  
  3. [{MAXVALUE n | NOMAXVALUE}]  
  4. [{MINVALUE n | NOMINVALUE}]  
  5. [{CYCLE|NOCYCLE}]  
  6. [{CACHE n|NOCACHE}] ;  
范例:创建一个myseq的序列,验证自动增长的操作。
  1. CREATE SEQUENCE myseq ;  
序列创建完成之后,所有的自动增长应该由用户自己处理,所以在序列中提供了一下的两种操作:

  • nextVal : 学的序列的下一个内容
  • currVal : 去的序列的当前内容
范例:建立一张以验证序列的操作
  1. CREATE TABLE testseq(  
  2. next NUMBER ,  
  3. curr NUMBER  
  4. ) ;  

现在向表中添加数据,添加数据的时候需要手工使用序列

范例:使用序列

  1. INSERT INTO testseq(next,curr) VALUES (myseq.nextval,myseq.currval) ;  

该操作执行5次。

查询testseq表:

  1. SELECT * FROM testseq ;  
可以发现,newVal的内容是种在进行自动增长的操作,而currVal使用取出当前操作的序列结果。

也就是说,现在这种序列,每次增长的幅度是1,也可以修改序列的增长幅度。

  • 每次的增长幅度 INCREMENT BY 长度
范例: 删除序列:
  1. DROP SEQUENCE myseq ;  
重新创建序列:
  1. CREATE SEQUENCE myseq INCREMENT BY 2;  
再创建表,进行test:
  1. DROP TABLE testseq ;  
  2. CREATE TABLE testseq(  
  3. next NUMBER ,  
  4. curr NUMBER  
  5. ) ;  
插入5个数据,测试:
  1. INSERT INTO testseq(next,curr) VALUES (myseq.nextval,myseq.currval) ;  

默认情况下,序列从1开始,那么也可以使用 START WITH 指定其开始位置。

  1. DROP SEQUENCE myseq ;  
  2. CREATE SEQUENCE myseq INCREMENT BY 2 STARTWITH 10 ;--从10开始  

创建一个序列,让其取固定值在1、3、5、7、9,循环序列。

  1. DROP SEQUENCE myseq ;  
  2. CREATE SEQUENCE myseq MAXVALUE 10 INCREMENT BY 2 START WITH 1  
  3. CACHE 2 CYCLE;  

相关内容