猿问
下载APP

mysql数据库并发问题解决方案?

最近写购物程序时当考虑到并发情况下避免出现超额购买的问题。

想了下面如图1这个流程

http://img1.mukewang.com/59d0f6cc000120cd09680245.jpg

当接到买入请求时更新库存(操作方式如图2)

http://img3.mukewang.com/59d0f6f00001e71107590222.jpg

操作返回int i若为1则表示库存足够,可以购买。0则表示库存不足。若更新库存成功则开启事务(允许用户进行支付操作,这里会引用外部api,由于事务允许并发,所以不会干扰性能,考虑到支付操作时是针对的单行记录,其他线程不会对此事务造成干扰引起错乱)

问题1:现在不明白的是图2中标注出的那一行,他的返回的原理是什么。内部是否是原子性的实现,若内部实现采用的是类似row_count(),在并发情况下就会出现获取返回条目与实际不符,导致判断出错。

问题2:这种流程还会出现哪些严重的问题。


-----------------------------------------分割线-----------------------------------------------

虽然介绍说事务是原子性的,但并不是真正意义上一个事务执行完才可以执行另一个事务。遇到并发的情况下,多个事务对库存的同时进行读操作后再进行写操作会造成错误。 所以在刚接到请求时更新库存没有用到事务。

冷魇
浏览 1449回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP