关于sequence得currval和nextval

laoliu212 2003-06-08 10:02:35
我的问题是这样的:
假设有两个用户A、B同时访问同一个sequence,并且A和B都开启了事务,
当A对一个数据库表进行插入操作,访问了nextval,但是并没有commit,
此时B也进行了同样的操作,也没有提交。
然后A又执行一条sql语句,插入另一个表,此时用到了currval,提交。
B也同样。
我想知道A插入的两个表中的sequence的值是否是一致的?
还是A插入第二个表中的sequence的值与B所得到的sequence相同?
...全文
586 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bzszp 2003-06-09
  • 打赏
  • 举报
回复
同意 KingSunSha
必须先nextval,此后再进行currval(不管别的连接nextval否commit否),此时仍等于刚才取得nextval;

事务 操作 值
a nextval:n
b nextval:n+1
a currval:n

dajian2000 2003-06-09
  • 打赏
  • 举报
回复
这种简单的并发问题,oracle一定会很好的处理的!
clzzcl 2003-06-09
  • 打赏
  • 举报
回复
同意楼上的
KingSunSha 2003-06-09
  • 打赏
  • 举报
回复
在一个事物中,必须执行了nextval之后才能使用currval,否则系统会报错:“序列未初始化”。
所以你的设想是不成立的。
lynx 2003-06-08
  • 打赏
  • 举报
回复
sequence每取一次,其值根据步长自动递增,但是不同用户已经取出的序列值不变。
如果说A取出的序列值是1,B取出的序列值是2,那么当B取到2以后,对于A,序列的currval=1,对于B,序列的currval=2
jiezhi 2003-06-08
  • 打赏
  • 举报
回复
每次取sequence后,它就增長了,不管你是否提交。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧