老生常谈:数据并发!!!你也会遇到的!

gwf25sz 2012-05-21 04:07:00
物料领用单:

PO2012050500025:
----------------
铅笔10
橡皮20
直尺5

-----------------------------------
提交后,需要审批:
流程如下:
A-B-C
-----------------------------------
A、B都通过。
C点通过,先查库存,看库存是否充足。
是:单据完成。扣除相应库存数量。
否:提示因库存不足,审批失败。
-----------------------------------

并发出现点:查完库存后(库存充足)。更新。
详细说明:
步骤1.C点通过,先查库存。结果三样东西库存都是充足的。
步骤2.然后程序执行更新操作。

但在步骤1和步骤2中间。由于其它原因使库存不足(如其它人先领用了)。这样就出现了负库存。


正常解决方法:
1.说服客户允许负库存。
2.操作完成后给出提示,实际领用数量(原因)。
3.数据库加数据锁。


首先排除1和2.因为我这客户明确说明不同意。

再说3. 个人对锁不是很了解。以下是个人观点:
首先,有锁就要有等待,比如我在领用时,必然这条数据会被锁掉,那么我如果正好有这个东西要入库呢?而实际生活中,入库和出库并不冲突的。
其次,客户网络环境较差,而且我都是很多条数据一起更新的(最笨的sql拼接),我不知道这会不会导致死锁。如果会,下面就免谈了。

最后,就是等待,我加了锁,然后解锁,这个过程是要我手动设置的还是会自动解锁。据我所知应该是会自动解锁的。那么页面上呢?告知用户一会再试,还是后台定个方法在那等待执行?

求一个实际可行的解决方案。


没分了,就这么点了,请各位谅解。
...全文
149 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuan.ye 2012-05-21
  • 打赏
  • 举报
回复
公司内部讨论解决方案:前端卡口。
用户申请的时候就卡口
------------------------------
没有经验多点的数据库开发人员吗?

得知道你的数据库访问方式,才能加事务。
cpio 2012-05-21
  • 打赏
  • 举报
回复
应该用锁的,锁的时间很短啊,应该是毫秒级就能完成数据更新。锁就解了。

至于你说现实中可以同时进行,实际上也不是同时进行。否则也会出问题,比如2个人同时出库,出之前数量是够的,但任意一个人出了之后另一个人就不够了。
gwf25sz 2012-05-21
  • 打赏
  • 举报
回复
.net
sql2005

公司内部讨论解决方案:前端卡口。
用户申请的时候就卡口
xuan.ye 2012-05-21
  • 打赏
  • 举报
回复
上代码吧,因为不知道你使用的是ORM,还是ado.net,也不知道是什么数据库。

步骤1.C点通过,先查库存。结果三样东西库存都是充足的。
步骤2.然后程序执行更新操作。
--------------------------------------------
其实针对这种情况,一般数据库上的书都有实例
快乐乔巴 2012-05-21
  • 打赏
  • 举报
回复
我说的lock并不是数据库里的什么事务锁 是C#中的lock关键字 注意下
快乐乔巴 2012-05-21
  • 打赏
  • 举报
回复
程序里用把这个更新操作lock一下,lock中首先先判断是否为负数 然后再决定是否更新
gwf25sz 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
库存表中加入trigger,若数量为负直接报错就可以了。。。
[/Quote]

目前,我已经加了。但问题是前面10条已经更新成功了!!!
存储过程事务回滚?
100个用户同时操作,哪个存储过程先执行。哪个后。这里又会出问题吧
人生无悔 2012-05-21
  • 打赏
  • 举报
回复
库存表中加入trigger,若数量为负直接报错就可以了。。。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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