当前位置: 代码迷 >> Sql Server >> 产品库存负数有关问题!锁能解决吗
  详细解决方案

产品库存负数有关问题!锁能解决吗

热度:33   发布时间:2016-04-24 09:26:48.0
产品库存负数问题!锁能解决吗?
给一个学校的社团做的一个简单购物系统,有秒杀功能...开始没想到他们有那么多人同时抢商品
现在出现问题就是库存会出现负数问题...痛苦啊

declare @kc int;
select @kc=kcsl from H_Product where spid=10;
if(@kc>0)
  update H_Product  set kcsl =kcsl -1 where  spid=10;
else
print '库存不足'
--购买成功一个库存减去一个
--但是实际情况 是当大很多人执行这个语句的时候 能出现负数...

我之前发过一个这样帖子,在.NET区 ,他们说这种情况要基于内存来处理了,保证变量的原子性

我想问问 如果纯用数据库能不能解决这个高并发的问题?解决库存负数的问题

------解决思路----------------------
设计问题,简单处理就加个约束,库存数据必须>=0
若已有负数,就加触发器,避免新的产品再为负
------解决思路----------------------
update H_Product set kcsl =kcsl -1 where spid=10 AND kcsl > 0;
if(@@ROWCOUNT<>0)
  抢购成功,加入购物车
else
  print '库存不足'

------解决思路----------------------
可以使用 独占锁 来解决  MSDN看下
  相关解决方案