Oracle提供了sequence对象,由系统提供自增长的序列号,通常用于生成数据库数据记录的自增长主键或序号的地方,一般结合触发器使用。
Sequence是数据库系统的特性,有的数据库有Sequence,有的没有。比如Oracle、DB2、PostgreSQL数据库有Sequence,MySQL、SQL Server、Sybase等数据库没有Sequence。
Sequence是数据中一个特殊存放等差数列的表,该表受数据库系统控制,任何时候数据库系统都可以根据当前记录数大小加上步长来获取到该表下一条记录应该是多少,这个表没有实际意义,常常用来做主键用。
1. 创建
1.1 要求
首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限。
1.2 语法
CREATE SEQUENCE sequence --创建序列名称
[INCREMENT BY n] --递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1
[START WITH n] --开始的值,递增默认是minvalue 递减是maxvalue
[{MAXVALUE n | NOMAXVALUE}] --最大值
[{MINVALUE n | NOMINVALUE}] --最小值
[{CYCLE | NOCYCLE}] --循环/不循环
[{CACHE n | NOCACHE}];--分配并存入到内存中,可以提高访问效率
1.3 示例
CREATE SEQUENCE LOCATIONS_SEQ
INCREMENT BY 1
START WITH 1
MAXVALUE 9900
MINVALUE 1
CACHE 2;
SELECT LOCATIONS_SEQ.nextval FROM DUAL; --取下一个序列值
SELECT LOCATIONS_SEQ.currval FROM DUAL; --取当前序列值
2. 修改
2.1 语法
alter SEQUENCE sequence --序列名称
[INCREMENT BY n] --递增的序列值是n 如果n是正数就递增,如果是负数就递减默认是1
[START WITH n] --开始的值,递增默认是minvalue 递减是maxvalue
[{MAXVALUE n | NOMAXVALUE}] --最大值
[{MINVALUE n | NOMINVALUE}] --最小值
[{CYCLE | NOCYCLE}] --循环/不循环
[{CACHE n | NOCACHE}];--分配并存入到内存中
2.2 注意事项
(1)必须是序列的拥有者或对序列有 ALTER 权限
(2)只有将来的序列值会被改变
(3)改变序列的初始值只能通过删除序列之后重建序列的方法实现
三、删除
使用DROP SEQUENCE 语句删除序列,删除之后,序列不能再次被引用。