Oracle序列

来源:互联网 发布:韩国软件ins下载 编辑:程序博客网 时间:2024/06/10 13:17

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 myseq1start 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类型的列使用

3sequence序列是要在主键或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》


0 0
原创粉丝点击