一:Oracle 的序列号有如下特点:

  • 序列号是独立于表的对象,由 Oracle 自动维护。
  • 序列号可以对多个用户共享使用,即同一个序列对象供多个表使用且相互独立。
  • 在 SQL 语句中使用序列号就可以使用它产生的序列号

二:Oracle 的序列号创建

CREATE SEQUENCE sequence_name
[START WITH n]
[INCREMENT BY n]
[{MAXVALUE n|NOMAXVALUE}]
[{MINVALUE n|NOMINVALUE}

下面依次解释各参数的含义:

  • START WITH n :序列号初始值,默认值为 1。
  • INCREMENT BY n :序列号的步进幅度,默认步进幅度为 1。
  • MAXVALUE n :定义序列号的最大值。
  • NOMAXVALUE:不设置序列号的最大值,但是我们知道计算机对于数据的表达是有限的,实际上这个值当序列号是升序时为 1027,序列号为降序时为-1。
  • MINVALUE n:定义序列号的最小值。
  • NOMINVALUE:不定义序列号的最小值,但是和参数 NOMAXVALUE 对应该值对于升序的序列号最小值为 1,对于降序的序列号的最小值为-1026。
  • CACHE :Oracle 服务器会预分配 n 个序列号并保保存在内存中。
  • NOCACHE:Oracle 服务器不会预分配序列号并保保存在内存中。
  • CYCLE :定义序列号在达到最大值或最小值后,将继续产生序列号。
  • NOCYCLE:定义序列号在达到最大值或最小值后,不再产生序列号。

 

三:Oracle 修改序列号

  ALTER SEQUENCE sequence_name

[INCREMENT BY n]
[{MAXVALUE n|NOMAXVALUE}]
[{MINVALUE n|NOMINVALUE}]
[{CACHE n|NOC

下面解释一下各参数的含义:

  • INCREMENT BY n :修改序列号每次执行的增长幅度。
  • MAXVALUE n|NOMAXVALUE:修改序列号的最大值|不设置最大值上限。
  • MINVALUE n|NOMINVALUE:修改序列号的最小值|不设置最小值下限。
  • CACHE n|NOCACHE:修改序列号在内存预分配并保存在内存中的个数。
  • ?CYCLE n|NOCYCLE:修改序列号使得序列号达到最大值或最小值后可以继续产生序列号

四:Oracle删除序列号

  drop sequence sequence_name;

 

五:案例

  创建一个表 EMPLOYEES



1 CREATE TABLE employees (
2     employee_id number(6) NOT NULL,
3     emp_name varchar2(20),
4     email varchar2(25) NOT NULL,
5     phone_number varchar2(20),
6     hiredate date NOT NULL
7 );



 

 

  创建序列



1 CREATE SEQUENCE emp_seq 
2 START WITH 1000 
3 INCREMENT BY 1
4 NOMAXVALUE
5 NOCYCLE;



 

 

用 currval 伪列查询当前序列号的值,使用 nextval 查询序列号的下一个值