oracle关于sequence的个人理解

oracle关于sequence的个人理解

1. sequence在多用户使用时的同步问题

个人感觉sequence是以连接(会话)为基础,类似于java中使用mysql的一个connection

网上很多人提到了刚创建完一个sequence时使用sequence.currval之前必须要使用sequence.nextval

报错如下所示:

1549560-20190402151059704-817457587.png

但是这个报错并不是只在刚开始创建sequence的时候会有,而是你每一次重新连接的时候都会出现的

如箭头所示,重新连接后再次使用还是会报错,只有先使用过sequence.nextval才行
1549560-20190402151345332-1849670000.png

总结: sequence.current的值时保存在一个会话中的,同一个连接中每次调用nextval都会刷新currval的值

这也就解决了多用户情况下会出现不同步的问题,因为currval只与会话有关,当同一个会话中没有调用nextval时,currval的值时不会发生改变的,即使其他的用户调用了nextval

以下是演示:

1549560-20190402152803924-1334290946.gif

2. 一个sql语句中的多个nextval,currval得到的值只会是同一个 (顺序无关)

1549560-20190402153057292-1326781456.png

转载于:https://www.cnblogs.com/d-i-p/p/10642906.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值