您的位置:首页 > 数据库 > Oracle

Oracle序列

2015-11-26 11:38 381 查看

Oracle序列

序列(sequence)介绍

oracle中,是通过使用序列(sequence)来处理自动增长列。

(1)可以为表中的列自动产生值。

(2)由用户创建数据库对象,并可由多个用户共享。

(3)一般用于主键或唯一列。

PS:在SQL Server,MySQL中都是用非常简单的一条语句来实现自增长的,没有像在Oracle中这样定义成一个对象--序列(sequence)来进行使用。定义成对象的好处就是方便管理,效率更高。



创建序列基本语法:

create sequence 序列名称

start with 开始数字

increment by 增长数字

minvalue 最小值

maxvalue 最大值 | nomaxvalue 无穷大

cycle | nocycle

cache | nocache



详细说明:

start with 开始数字à从几开始

increment by 增长à步长,每次增长几个数

minvalue 最小值

maxvalue 最大值à可以不设置,不设置应写为nomaxvalue,也就是无穷大

cycle 循环,也就是说增长到最大值后,再从最小值开始重新增长 nocycle 不循环,也就是说增长到最大值后就停止增长

nocache 不设缓存,cache设置缓存,设置缓存的优点是提高效率,但是缺点就是当出现意外中断时,缓存中没有使用的序列数字将被舍弃

实例:

--创建一个序列
create sequence myseq1
start with 1    --初始值
increment by 1  --自增值
minvalue 1   --最小值
maxvalue 30000  --最大值
cycle    --循环
nocache --不缓存

--创建表
create table test1
(
       id number primary key,
       name varchar2(30)
);
--使用序列
insert into test1 values(myseq1.nextval,'a');
insert into test1 values(myseq1.nextval,'a');
insert into test1 values(myseq1.nextval,'a');
select * from test1;

--查看序列到多少号了
select myseq1.currval from dual;


特别说明:

1、myseq1:表示序列的名字,nextval:关键字,表示从序列中取下一个值。

2、sequence序列是需要配合number类型的列来使用;

3、sequence序列是要在主键或unique列上使用的。

4、第一次使用nextval返回的是初始值;随后的nextval会自动增加你定义的increment by值,然后返回增加后的值;

5、currval总是返回当前sequence的值,但是在第一次nextval初始化之后才能使用currval,否则会出错。

6、使用一次nextval会增加一次sequence的值,所以如果你在同一个语句里面使用多个nextval,其值就是不一样的。

7、如果指定cache值,oracle就可以预先在内存里面放置一些sequence,这样存取效率更高。cache里面的取完后,oracle自动再取一组到cache。使用cache或许会跳号,比如数据库突然不正常down掉(shotdown abort),cache中的sequence就会丢失,所以可以在create sequence的时候用nocache防止这种情况。

使用sequence的情况

不包含子查询、snapshot/view的select的语句

insert语句的子查询中

insert语句的values中

update的set中

如:update 表名 列值=序列名.nextval where 条件;





在sqlserver和mysql中都可以在定义表的时候,直接给指定自增长。

sqlserver中设置自增长

create table 表名(id int primary key identity(1,1),name varchar(32));

mysql中设置自增长

create table 表名(id int primary key auto_increment,name varchar(32));



----------参考《韩顺平玩转Oracle》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: