Oracle-序列(Sequence)的使用

0. 前言

在oracle中,序列是用于产生一系列唯一数字的数据库对象。序列其实就是一个序列号生成器,可以为表中的行自动生成序列号

主要的用途是生成主键的值,并且定义序列的用户必须具有CREATE SEQUENCE权限。

举个简单的例子来理解下序列的使用场景。
比如:在订单表中每增加一个订单,那么订单ID就+1,如果每次在插入数据时还要手动插入订单ID,既要查看上次订单ID延续到哪个值,也要手动去添加,容易出错且麻烦。那么我们可以将订单ID的获取方式设置为通过序列的方式自动添加,当有新的订单数据时,订单ID的值直接通过获取序列值来自动添加。

注意:序列的使用过程中可能会出现跳号的情况,并不是每个值之间的差值都相等,需要考虑所用列的实际需求。

1. 查看当前用户下的序列

select * from user_sequences;

1.1 举例

在这里插入图片描述

2. 创建序列

2.1 最简单的创建,不加任何参数

create sequence 序列名;

2.1.1 举例

创建一个序列 my_sequence1。创建完后再查看当前用户下的序列,显示已经创建好了。可以看到各个参数的默认值。
在这里插入图片描述

也可从左侧序列列表里【右击–查看】,可查看序列的具体信息,如下图所示。
在这里插入图片描述

2.2 加上参数,创建序列

create sequence 序列名称
start with n        --起始值,从n开始,默认为1
increment by n      --设置步长为n,默认为1
minvalue n          --设置最小值为n,默认为1
maxvalue n          --设置最大值为n,可以不设置,不设置应写为 nomaxvalue ,也就是无穷大
cycle               --达到最大值后循环或不循环,即当增长到最大值后,再从最小值重新开始。不循环应写为 nocycle ,
cache n             --是否设置缓存,n默认为20

2.2.1 举例

创建一个序列 my_sequence2 ,各项参数如下图所示
在这里插入图片描述

3. 向序列中取值

select 序列名.nextval from dual;

3.1 举例

针对刚才创建的序列 my_sequence1 ,向序列中取值,如下图所示。可以看到此时序列已经存在了一个值,值为1。
在这里插入图片描述

4. 获取序列的当前值

select 序列名.currval from dual;

4.1 举例

上面针对my_sequence1进行了nextval的操作,此时获取序列的当前值应该为1,如下图所示。
在这里插入图片描述
不过需要注意的是,刚创建完序列后,必须先执行至少一次 nextval(序列取值操作) 后才能查询当前值,否则会报错。
比如,上面创建的 my_sequence2 只是创建完了,还没有进行 mysequence2.nextval 操作,此时我们获取一下my_sequence2 的当前值,结果会报错,如下图所示。

在这里插入图片描述

此时,我们只需向序列 my_sequence2 中取一次值(my_sequence2.nextval)即可,如下图所示。

在这里插入图片描述

5. 修改序列

alter sequence 序列名
start with n       --修改起始值,若已经使用了,则无法修改
increment by n     --increment值必须小于maxvalue与minvalue的差
cache n            --cache值必须小于cycle值(即循环一次有几个数)

5.1 举例

(1)我们先尝试修改 起始值 ,刚创建的序列 my_sequence2的起始值为2,我们将起始值修改为1,结果会报错。如下图所示,无法修改起始值。

在这里插入图片描述

(2)修改序列的步长。重新创建一个序列 my_sequence3,参数值如下图所示。
在这里插入图片描述

修改序列步长为10,然后取值–>获取当前值。

在这里插入图片描述
再进行一次 取值–>获取当前值 ,结果如下,说明每次步长为10设置成功。
在这里插入图片描述


感谢大家阅读查看,如有补充和建议,欢迎留言~期待关注、点赞、收藏😘

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值