首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个客户端几乎同时访问相同的数据。

多个客户端几乎同时访问相同的数据。
EN

Stack Overflow用户
提问于 2014-01-23 06:57:02
回答 1查看 41关注 0票数 0

大家好,

我正在C# .net 4.0框架上工作,数据库是MicrosoftSQLServer2008R2。

有一个系统,让用户做礼品赎回。当用户单击“赎回”按钮时,系统将:

  1. 在更新customer_gift表之前先检查礼品清单,
  2. 并更新特定礼物的gift_inventory表。

如果库存小于0,则提示错误消息,通知用户礼品已经完成,然后取消赎回过程。

在以下情况下会出现问题:

礼物A现在只有一个数量的库存。

客户杰克点击“赎回”按钮在2013-11-11 09:22:27.780。客户Jess点击“赎回”按钮在2013-11-11 09:22:27.497

他们点击“赎回”按钮的不同时间只有0.0283秒。

因此,可能不同的时间太短了,他们都成功地赎回了礼物,因为在系统(第一客户)更新gift_inventory表之前,系统(第二客户)已经从库存(Gift A)中获得了数据,因此,由于库存仍然等于1,所以系统仍然允许第二客户进行。

我已经想出了解决这个问题的方法,描述如下:为gift_inventory表创建一个新列,命名为lock,并使用数据类型Boolean。当客户单击“赎回”按钮,在系统检查礼品库存之前,将布尔值设置为true。因此,如果第二个客户尝试访问礼品库存,并发现lock = true,那么系统将等待1秒,然后再次尝试访问,直到lock = false,然后才访问和获取库存数据。

不过,我不认为这是一个好的解决办法。我认为这可能会导致数据库变得缓慢。

有什么想法和建议吗?

EN

回答 1

Stack Overflow用户

发布于 2014-01-23 07:04:11

我认为您可以通过在事务中执行每次更新并在数据库中使用行锁定来实现这一点。

点击此处阅读更多信息:

事务 http://technet.microsoft.com/en-us/library/jj856598.aspx

锁定 http://technet.microsoft.com/en-us/library/aa213039(v=sql.80).aspx

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21301380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档