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

oracle中创建序列以及序列使用注意事项

2017-07-23 17:14 369 查看
1.oracle是通过序列(sequence)来处理自动增长列

用法:

create sequense my_seq   //创建序列名:my_seq

start with 1  //从1开始

increment by 1  //每次增长1

maxvalue 999999  //nomaxvalue(不设置最大值) ---最大值

minvalue 1  //最小值

cycle  //nocycle   一直累加,不循环   ;cycle 表示循环

nocache   ---缓存

//cache 10 表示一次产生10个号,

//但是使用缓存产生号,优点是提高效率,缺点是可能产生跳号

//上面表示从1开始,每次增长1,最大值为999999,之后又循环开始

---创建表

create table test1(id number primary key ,name varchar2(32));

insert into test1 values(myseq.nextval,'abc');

insert into test1 values(myseq.nextval,'bdc');

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

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

比如:system用户使用scott创建的序列,从什么开始增长?

答:接着scott里面的增长

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

2.序列细节说明:

一旦定义了某个序列,可以使用currval,nextval

currval:返回sequence的当前值

nextval:返回增加sequence的值,然后返回sequence的值

比如:

序列名.currval:select 方案名.序列名.currval from dual;//用于查看当前序列是多少

序列名.nextval:select 方案名.序列名.nextval from dual;//用于查看当前序列的下一个值是多少

【什么时候使用sequence】

①不包含子查询,snapshot,view的select语句【用的少】

②insert语句的子查询中【用的较多】

③insert语句的values 中【用的多】

④update的set中【用的较多】

3:使用sequence注意事项:

①currval总是返回当前sequence的值,只有在第一次nextval初始化后,才能使用currval,

否则会出错。每使用一次nextval,就会增加一次sequence的值,同一个语句里面要是有多个nextval,其数值就是不一样的

②第一次nextval返回的值是初始值:随后的nextval会自动增加定义的increment by值,然后

返回增加后的值

③如果指定cache值,oracle就可以预先在内存里面放置一些sequence,这样存取会更快,

cache里面取完后,oracle自动再取一组到cache,使用cache或许会跳号,比如数据库突然不正常

down掉,cache中的sequence就会丢失,可以在定义sequence的时候,使用nocache防止这种情况



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: