社区
基础和管理
帖子详情
关于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
打赏
收藏
关于sequence得currval和nextval
我的问题是这样的: 假设有两个用户A、B同时访问同一个sequence,并且A和B都开启了事务, 当A对一个数据库表进行插入操作,访问了nextval,但是并没有commit, 此时B也进行了同样的操作,也没有提交。 然后A又执行一条sql语句,插入另一个表,此时用到了currval,提交。 B也同样。 我想知道A插入的两个表中的sequence的值是否是一致的? 还是A插入第二个表中的sequence的值与B所得到的sequence相同?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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后,它就增長了,不管你是否提交。
sequence
等同于序列号
在Oracle数据库中,
sequence
等同于序列号,每次取的时候
sequence
会自动增加,一般会作用于需要按序列号排序的地方。 1、Create
Sequence
(注释:你需要有CREATE
SEQUENCE
或CREATE ANY
SEQUENCE
权限) CREATE
SEQUENCE
emp_
sequence
INCREMENT BY 1 —— 每次加几个 START WITH 1 —— 从1开始计数 MAX
VAL
UE —— 最大值值 NOMAX
VAL
UE —— 不设置最大值 NOCYCLE —— 一直累加,不循环 CYCLE CACHE 10; 只要定义了emp_
sequence
,你就可以用使
CURR
VAL
,NEXT
VAL
CURR
VAL
=返回
sequence
的当前值 NEXT
VAL
=增加
sequence
的值,然后返回
sequence
值 例如: emp_
sequence
.
CURR
VAL
emp_
sequence
.NEXT
VAL
insert into dept (deptno, dname, loc)
val
ues (emp_
sequence
.next
val
, '物流部', '苏州'); //查询序列的当前值 select emp_
sequence
.
curr
val
from dual; 可以使用
sequence
的地方: 。 不包含子查询、snapshot、VIEW的 SELECT 语句 。INSERT语句的子查询中 。NSERT语句的
VAL
UES中 。UPDATE 的 SET中 可以看如下例子:
PostgreSQL教程(七):函数和操作符详解(3)
九、序列操作函数: 序列对象(也叫序列生成器)都是用CREATE
SEQUENCE
创建的特殊的单行表。一个序列对象通常用于为行或者表生成唯一的标识符。下面序列函数,为我们从序列对象中获取最新的序列值提供了简单和并发读取安全的方法。 函数 返回类型 描述 next
val
(regclass) bigint 递增序列对象到它的下一个数值并且返回该值。这个动作是自动完成的。即使多个会话并发运行next
val
,每个进程也会安全地收到一个唯一的序列值。
curr
val
(regclass) bigint 在当前会话中返回最近一次next
val
抓到的该序列的数值。(如果在本会话中从未
新版全面系统完整的人工智能教程
在本课程中,你将学到,机器学习的原理和基本知识、线性回归、logistic回归、决策树、朴素贝叶斯算法,以及深度学习的原理、tensorflow入门、卷积神经网络、循环神经网络、手写数字识别,并基于tensorflow
sequence
-...
MySQL实现类似Oracle序列的方案
MySQL实现类似Oracle的序列 Oracle一般使用序列(
Sequence
)来处理主键字段,而MySQL则提供了自增长(increment)来实现类似的目的; 但在实际使用过程中发现,MySQL的自增长有诸多的弊端:不能控制步长、开始索引、是否循环等;若需要迁移数据库,则对于主键这块,也是个头大的问题。 本文记录了一个模拟Oracle序列的方案,重点是想法,代码其次。 Oracle序列的使用,无非是使用.next
val
和.
curr
val
伪列,基本想法是: 1、MySQL中新建表,用于存储序列名称和值; 2、创建函数,用于获取序列表中的值; 具体如下: 表结构为: drop tabl
next
val
和
curr
val
Oracle中next
val
和
curr
val
到底有什么区别呢? 身为小白的我斗胆为大家分享下我的理解,^_^,如有错误或不足,请各位多多指点一般next
val
和
curr
val
用于序列
sequence
中, -通过next
val
和
curr
val
进行调用 next
val
:每次获得不同的
sequence
值,根据increment(增量),序列值增加
curr
val
:获得当前指向的s
基础和管理
17,377
社区成员
95,128
社区内容
发帖
与我相关
我的任务
基础和管理
Oracle 基础和管理
复制链接
扫一扫
分享
社区描述
Oracle 基础和管理
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章