SQL sequence
一: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 查询序列号的下一个值