Mysq详细讲解如何解决库存并发问题


当前第2页 返回上一页

简单来说,就跟我们小时候玩坦克大战一样,虽然我们玩家不能挡住所有的进攻者。但也并不是随随便便谁都可以往我们家基地开炮。

//开始事务
beginTransaction();
// 扣减库存前的业务
int stock = getStock();
if(stock <= 0 ){
	//库存不足,退出程序
	rollback();
	return;
}
// 执行扣减库存操作
boolean reduceStockSuccess = reduceStock();
if(!reduceStockSuccess){
	//扣减库存失败,代码回滚
	rollback();
	return;
}
// 执行扣减库存后的业务操作
//记录库存
writeRecod();
//提交事务
commit();
return;

2 . 日库存数一百 , 卖完为止

该需求相比1来说,问题在于。单从库存表,记录表来说。除非我们在新增到记录表的SQL里面将每日库存数100接入。否则,我们无法通过事务与SQL来帮我们解决并发问题。

但是我们又不可能在记录购买信息的代码内,每日库存数100的逻辑耦合进去。

因此,这个问题对于MYSQL来说是个死局。

若想单靠MYSQL之力若想破局,我们只能依靠将每日库存数的这个逻辑,专门设计一张数据表。

如设计一张商品每日购买数量记录表记录某个商品每日被购买的数量。

在每次购买的时候都更新一下本日购买的数量

 UPDATE day_t SET day_stock += number WHERE day_stock + number <= 100

虽然能解决需求问题,但是表现出来的问题依然是业务耦合进公关表内。

  • 每日购买数量表,不应当仅仅为每日购买上限服务。当前的解决问题的方案,等同于解决问题的同时又制造了一个差不多的问题。只是一个问题转移到了其他部分出问题
  • 即使我们为该需求专门创建一张表,但是随着后续的数据表越来越多,程序的管理性却越来越差,比如后续还会出现周限制,月限制,年限制等等等等。

总结

现在我们可以看出,使用MYSQL的方式虽然简单,但是却有着非常大的局限性。

但这里也并不是说某些方案一定好,却也一定差。

主要看当前的业务,MYSQL的方式,适用于最底层。适合完成某个业务最原始的功能。

到此这篇关于Mysq详细讲解如何解决库存并发问题的文章就介绍到这了,更多相关Mysq库存并发内容请搜索

更多相关Mysql内容来自木庄网络博客


标签:Mysql

返回前面的内容

相关阅读 >>

命令行怎么设置mysql编码格式?

怎么把文本导入mysql

mysql中插入表数据中文乱码怎么办

mysql数据库之alter表的sql语句集合

从mongodb开始浅谈数据库的知识

mysql数据库报错:too many connections的解决办法

mysql如何判断字段是否为空

mysql5.7.9开启慢查询日志的技巧

mysql delete语法使用详细解析

mysql数据表中字段的数据类型有哪些?

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...