Mysq详细讲解如何解决库存并发问题
2023-03-04 09:32:25 作者:admin
本文整理自网络,侵删。
目录
- 面临的问题
- 如何实现
- 需求具体实现的方案
- 总结
面临的问题
长话短说,假设我们现在面临以下需求
- 商品的库存有两千,卖完为止
- 某商品本日的售卖只允许卖出一百,卖完为止
如何实现
我提出的方案也很简单,使用乐观锁的方式。
以下是具体的方案
-- stock: 当前库存数 number:扣减的数量 -- update t SET stock -= number WHERE stock >= number
外加上事务,便可以实现一个基本的库存扣减操作。大部分情况下,无需担心所谓的“并发问题”。事务具有的特性,会在此处帮你解决的掉这个大难题。
(简单的说:事务会在执行 非查询 的操作的时候,会实现类似锁的功能。直到前面的事物提交或者回滚之前,后续的操作都会被挂住)
需求具体实现的方案
1.商品的库存两千,卖完为止
其实从理论上,想解决这个问题,只依靠上文之中的update语句便可以完成。
具体步骤如下:
- 执行update 语句,查看其结果 。
- 若是,则执行后续操作
- 若否,代码回滚
具体代码如下
//开始事务beginTransaction();// 扣减库存前的业务// 执行扣减库存操作boolean reduceStockSuccess = reduceStock();if(!reduceStockSuccess){//扣减库存失败,代码回滚rollback();return;}// 执行扣减库存后的业务操作//记录库存writeRecod();//提交事务commit();return;
虽然,程序其实如此便可。但是从个人的角度去看,我还是建议大家多做一点校验,以减少update程序运行次数。
就比如说,我们可以在前面加一个查询当前库存数量代码。
主要的目的在于,虽然这个校验代码,不能说百分百的解决问题 ,挡住所有的流量。但是却可以挡住大部分无意义的流量,调用update的次数。
阅读剩余部分
相关阅读 >>
如何在mysql中创建用户和授予权限
mysql免费版好用么
navicat如何实现mysql备份与恢复
大数据学习的mysql进阶
mysql怎么删除表中的某一字段
mysql无法连接出现错误提示10061怎么办
windows如何启动mysql
mysql删除数据库的命令是什么?
mysql怎么退出
mysql存储过程教程是什么
更多相关阅读请进入《mysql》频道 >>

数据库系统概念 第6版
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
猜你喜欢
联络方式:
400-123-789
邮箱:xiachao@163.com
Q Q:12345678
微信公众号
微信二维码