OracleSequence的创建和使用

1.介绍

Sequence是数据库系统按照一定的规则自动增加的数字序列,主要用于生成数据库数据记录。这个序列一般作为代理主键(因为不会重复)。
Sequence是数据中一个特殊存放等差数列的表,该表受数据库系统控制,任何时候数据库系统都可以根据当前记录数大小加上步长来获取到该表下一条记录应该是多少,这个表没有实际意义,常常用来做主键用。
Sequence是数据库系统的特性,有的数据库有Sequence,有的没有。比如Oracle、DB2、PostgreSQL数据库有Sequence,MySQL、SQL Server、Sybase等数据库则没有Sequence。

2.创建

--Create Sequence之前要获取CREATE SEQUENCE或者CREATE ANY SEQUENCE权限

create sequence SEQ_TEST                  --Sequence实例名
minvalue 1                                --最小值,可以设置为0
maxvalue                                  --不设置最大值
start with 1                              --从1开始计数
increment by 1                            --每次加几个
cache 20;                                 --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE

3.使用

创建好Sequence后就可以通过currVal与nextVal进行使用;
currVal:返回 sequence的当前值;
nextVal:  增加sequence的值,然后返回 增加后sequence值

如得到上边创建Sequence值的语句为(其中justin为用户,该用户下其实可以省略):
select justin.SEQ_TEST.currVal 2 from dual;

在Sql语句中可以使用sequence的地方:
1.不包含子查询、snapshot、VIEW的 SELECT 语句
2.INSERT语句的子查询中
3.INSERT语句的values中
4.UPDATE 的 SET中

* CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能 使用CURRVAL,否则会出错
* 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的 INCREMENT BY值,然后返回增加后的值
* NEXTVAL和CURRVAL同时存在于同一语句时,返回值一直,无论位置先后

4.修改

拥有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop sequence 再 re-create

alter sequence justin.SEQ_TEST  maxvalue 9999999; 

ALTER SEQUENCE justin.SEQ_TEST
INCREMENT BY 10
MAXVALUE 10000
CYCLE — 到10000后从头开始
NOCACHE ;

5.删除

DROP SEQUENCE justin.SEQ_TEST;

发表评论

电子邮件地址不会被公开。 必填项已用*标注

18 − 8 =