oracle序列操作

序列的主要作用:
在很多数据库里都存在自动增长列的数据类型,几乎所有的关系型数据库都支持自动增长列的操作,但是只有oracle特殊,只有oracle 12c版本之后才提供自动增长列,在此之前都是用序列的方式来处理。
序列的创建语法:

create sequence 序列名
[increment_by 步长][start with 开始值]
[maxvalue 最大值|nomaxvalue]
[minvalue 最小值|nominvalue]
[cycle|nocycle]
[cache 缓存数据 |nocache]

大部分情况下,我们都只会创建默认序列,默认序列指最小值为1,没有最大值,开始值为0,并且设有20个缓存数据。

通常情况下我们只需要执行就可以:create sequence 序列名

创建完序列后,其内容一定会保存在数据字典中,“user_sequences”
查询数据字典之后会发现其中字段:
sequence_name 序列名
minvalue 最小值
maxvalue最大值
increment_by 步长(每次增长多少)
cy 是否循环
cache_size 缓存数据
last_number 最后一次内容值为多少

序列的使用:
对于序列可以采用两个伪列来使用:
序列对象.nextval:表示进行序列的增长,每调用一次,序列加上指定的步长
序列对象.currval:表示取得当前序列内容,不管如何调用,序列内容不发生改变

序列成功创建之后,严格来讲序列还无法直接执行currval,必须先执行nextval 。

而对于缓存数据:
我们说如果如果系统提供了缓存概念,基本上是用来提升程序性能的。
通俗来说,缓存就是,比方说一个人卖包子,有人来买,如果没有缓存的话,那这个人就要先去买材料,回来处理馅,做够买家需要的包子。然后又有人来买,他还需要再去市场买材料,然后做包子,,这样的话效率太低。如果有缓存的话,就相当于这个人一次性做了足够多的包子,有人来买的时候直接给他。这样效率就很快了。
但是这样方便的同时,也有一些小问题,就是,做够了包子没有人过买,导致资源浪费,容易会发生跳号的问题。

如果序列想要为表中某个字段完成自动增长列的功能,只能通过insert完成,不能写在数据库的创建脚本里
使用方法举例:

--删除表
drop table ces purge;
--创建表
create table ces (
id number,
name varchar2(20),
constraint pk_id primary key (id)
);
--在插入语句中引用序列
insert into ces(id,name) values(myxul.nextval,'张三');

由于此时在一个session下进行,序列号是正常的,如果在多个session下,可能会出现序列号变化的情况,不用去管;
注:在设置循环序列的时候要注意缓存数据;

修改序列:

create sequence 序列名
increment by  2(修改序列步长为2)
start with 10(修改序列开始值为10)

删除序列:

drop sequence 序列名;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值