社区
基础和管理
帖子详情
更新丢失或者乐观并发
pjr1007
2009-07-15 05:02:21
我写了个存储过程,WorkInfo是记录所要取的所有任务,存储过程执行的是对WorkInfo进行Update,对TempWorkInfo进行Insert,通过WorkInfo的Havefinishnum来限制只有两个人能操作WorkInfo里面的任务,但是现在在TempWorkInfo中出现了多于两个人取WorkInfo里面的任务记录(多于两个人update了WorkInfo中的同一个任务),我想这是一般的更新丢失或者乐观并发,求教高手这种情况应该怎么处理。
...全文
30
15
打赏
收藏
更新丢失或者乐观并发
我写了个存储过程,WorkInfo是记录所要取的所有任务,存储过程执行的是对WorkInfo进行Update,对TempWorkInfo进行Insert,通过WorkInfo的Havefinishnum来限制只有两个人能操作WorkInfo里面的任务,但是现在在TempWorkInfo中出现了多于两个人取WorkInfo里面的任务记录(多于两个人update了WorkInfo中的同一个任务),我想这是一般的更新丢失或者乐观并发,求教高手这种情况应该怎么处理。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
pjr1007
2009-07-17
打赏
举报
回复
呵呵 我是个初学者,您能说的明白点吗?具体应该怎么实现,至于悲观加锁,我在游标定义中试过悲观加锁啦,性能那是大大的降低的,不可取啊
pjr1007
2009-07-17
打赏
举报
回复
但是锁定后,性能大大降低啦
inthirties
2009-07-17
打赏
举报
回复
[Quote=引用 11 楼 inthirties 的回复:]
悲观的类似vss的做法
乐观的类似cvs和subversion的做法
[/Quote]
我们以前对这个lock不是在database级别做的,因为我们的应用来说,用户做edit的时候,其实并没有马上保存,而是在页面上修改好了数据以后才保存的,而对于数据库来说,我们不可能把这条记录从点击edit的时候就上锁,而直到点击save的时候才解锁,如果这样处理的话,对于应用系统来说简直就是灾难,我们的做法,其实是自己做的应用上的锁,当点击edit的时候,其实是应用上的锁,而不是数据库级别的锁,save的时候,去检查这个锁,进行处理。
当然我们的上锁,解锁的策略有多种形式,类似vss和cvs/subversion的都有。但是都是通过应用做的,
pjr1007
2009-07-17
打赏
举报
回复
无语。。。都是这种回答一点不接着说下去的人 汗颜
pjr1007
2009-07-16
打赏
举报
回复
你是不是说要到程序里面去处理,而不是通过数据库的存储过程来处理吗?
pjr1007
2009-07-16
打赏
举报
回复
哦~~~能直接跟我说下 解决这个问题的思想吗?
inthirties
2009-07-16
打赏
举报
回复
[Quote=引用楼主 pjr1007 的帖子:]
我写了个存储过程,WorkInfo是记录所要取的所有任务,存储过程执行的是对WorkInfo进行Update,对TempWorkInfo进行Insert,通过WorkInfo的Havefinishnum来限制只有两个人能操作WorkInfo里面的任务,但是现在在TempWorkInfo中出现了多于两个人取WorkInfo里面的任务记录(多于两个人update了WorkInfo中的同一个任务),我想这是一般的更新丢失或者乐观并发,求教高手这种情况应该怎么处理。
[/Quote]
对于数据库来说,提交后,才能被查询到,所以要做到你这样的要求,你要通过应用去控制。
liuyi8903
2009-07-16
打赏
举报
回复
对于您的这个问题, 看看tom的书会使你非常清楚这个概念的.
"查询重启动",以及"串行"事务,你自己看.
inthirties
2009-07-16
打赏
举报
回复
悲观的类似vss的做法
乐观的类似cvs和subversion的做法
henreash
2009-07-16
打赏
举报
回复
先锁定了啊记录啊 这样就只能串行执行了。没有丢失更新问题发生了。
suncrafted
2009-07-15
打赏
举报
回复
帮顶了
pjr1007
2009-07-15
打赏
举报
回复
下班之后,继续求教,哎,这个问题不解决相当郁闷啊
pjr1007
2009-07-15
打赏
举报
回复
还有其他方式吗?你这种方法貌似还是照样会出现这个问题的
asdf_ndsc
2009-07-15
打赏
举报
回复
再建 一个表。
里面记录那两个户先获得编辑权。 用户编辑 时先从 这个新表里判断下。
pjr1007
2009-07-15
打赏
举报
回复
求助啊 没人帮忙吗 ?继续帮助 在线等
数据库九(
并发
控制)
丢失
修改:两个事务同时读入同一个数据并修改,结果T2的提交破坏了T1提交的结果 不可重复读:事务T1读取数据后,事务T2执行
更新
操作,导致T1无法再现前一次读取结果 读脏数据:事务T1修改某一数据后写回磁盘,T2读取...
深入理解Yii2.0
乐观
锁与悲观锁的原理与使用
在
并发
环境下,有可能会出现脏读(Dirty Read)、不可重复读(Unrepeatable Read)、 幻读(Phantom Read)、
更新
丢失
(Lost update)等情况。具体的表现可以自行搜索。 为了应对这些问题,主流数据库都提供了锁机制...
EFCore
乐观
并发
在 Entity Framework Core 中,
乐观
并发
是一种处理
并发
访问的方式,它允许多个用户同时访问和修改相同的数据,而不会发生冲突。
乐观
并发
的实现通常涉及使用版本控制字段来检测数据更改,并在保存更改时检查这些字段...
并发
事务导致的
丢失
更新
及处理方式详解
并发
事务导致的
丢失
更新
及处理方式详解前言
丢失
更新
的定义
丢失
更新
产生的原因(两种)回滚
丢失
(Lost update)覆盖
丢失
/两次
更新
问题(Second lost update)
丢失
更新
处理方式数据库的锁通过数据库的锁机制解决
丢失
...
mysql+防止
丢失
更新
_MYSQL使用锁解决
并发
下的
更新
丢失
问题
更新
丢失
是指
并发
下两次
更新
同时进行,后一次
更新
覆盖了前一次
更新
的情况,
更新
丢失
是数据没有保证一致性导致的。举个栗子:用户A在银行卡有100元钱,某一刻用户B向A转账50元(称为B操作),同时有用户C向A转账50元...
基础和管理
17,377
社区成员
95,128
社区内容
发帖
与我相关
我的任务
基础和管理
Oracle 基础和管理
复制链接
扫一扫
分享
社区描述
Oracle 基础和管理
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章