求助 关于超卖问题

24 views
Skip to first unread message

liyingquan

unread,
Jul 6, 2017, 4:45:49 AM7/6/17
to agilechina
各位, 最近我遇到一个库存超卖问题,
Google解决方案过程中看到如下说法:
【为了防止超卖现象,所有减库存操作都需要进行一次减后检查,保证减完不能等于负数。(由于MySQL事务的特性,这种方法只能降低超卖的数量,但是不可能完全避免超卖)
update number set x=x-1 where (x -1 ) >= 0;
对此比较困惑,为什么MySQL对这种update还会出现超卖(number小于零)呢? MySQL已经配置为innodb和默认隔离基本了啊。
 

皮宏宇

unread,
Jul 6, 2017, 4:50:20 AM7/6/17
to agile...@googlegroups.com
这个逻辑利用的是sql语句执行的原子性,也就是在并发环境下,单条sql 执行过程中引擎保证了其不会读到脏数据。
然而,实际测试表明,MySQL 的innoDB引擎并不是这样。所以还是需要老老实实使用transaction 做隔离

--
--
敏捷中国 http://www.agilechina.net 邮件列表
如果想发起讨论,请发送邮件到 agile...@googlegroups.com
如欲退订请发送邮件到 agilechina-...@googlegroups.com
更多选项,请访问 http://groups.google.com/group/agilechina
---
您收到此邮件是因为您订阅了Google网上论坛上的“敏捷中国”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到agilechina+...@googlegroups.com
要查看更多选项,请访问https://groups.google.com/d/optout

Reply all
Reply to author
Forward
0 new messages