oracle中sequence浅析

一,定义
sequence(序列)是数据库对象一种。多个用户可以通过序列生成连续的数字以此来实现主键字段的自动、唯一增长,并且一个序列可为多列、多表同时使用。
序列消除了串行化并且提高了应用程序一致性。

二,创建

CREATE SEQUENCE SEQ_1 --序列名称
INCREMENT BY 1 -- 步长,每次加1(也可以为负数,表示降序)
START WITH 1 -- 从1开始计数
MINvalue 1 --设置最小值为1
NOMAXvalue -- 不设置最大值
NOCYCLE /* 一直累加,不循环(设置循环则在达到最大值后下一个值从最小值minvalue开始循环)*/
CACHE 10; /*设置缓存cache个序列,以保证序列的连续,如果设置为 NOCACHE,系统down掉了或者其它情况将会导致序列不连续*/

三,获取sequence的值

1.nextval
第一次使用返回初始值,之后使用按照步长增加序列的值,返回增加后的值

sql语句如下:

select SEQ_1.nextval from dual;

第一次执行结果如下:
这里写图片描述

第二次执行结果如下:
这里写图片描述

2.currval
返回sequence当前值

sql语句如下:

select SEQ_1.currval from dual;

执行结果如下:
这里写图片描述

currval要注意的是:第一次执行currval会报错,我的理解是,还没有生成第一个值,需要用nextval生成第一个值,之后才能使用currval

第一次使用currval报错如下:
这里写图片描述

之后使用currval正常,结果如下:
这里写图片描述

3.可能有些跟我一样刚接触oracle的同学对dual还不是太了解,下面这个资料会对你们有所帮助:
oracle中的dual用途

四,修改
修改自己模式sequence需要alter object权限,修改其他模式序列需要alter any sequence权限。
sql语句都是很基本的,跟修改表规律差不多,alter(修改) sequence(序列) SEQ_1(序列名) MINvalue(需要修改的项) 2(修改的值);

注意:
1.不能修改初始值,想修改初始值只能重建序列
这里写图片描述

2.设置maxvalue要大于minvalue且大于当前值,比如当前值为5
这里写图片描述
同理,设置minvalue要小于maxvalue且小于当前值

五,删除
删除序列必须要有drop any sequence权限

sql语句如下:

drop sequence SEQ_1;

删除结果如下图所示:
这里写图片描述


以上有什么不对的地方,还请在评论中指出,好加以改正。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值