我正在构建一个简单的购物车。目前,为了确保客户永远不会购买缺货的产品,在处理订单时,我对他们购物车中的每个产品都有一个循环:
-- 开始交易 -- 遍历购物车中的每个产品,然后
- 从产品表中选择库存数量
如果有现货:
- 我将减少产品的库存数量
- 将产品添加到订单项目表
否则,我调用回滚并返回错误
--(如果没有要求回滚,一切都以提交结束--
但是,如果在任何给定时间,产品的库存计数在检查该特定产品后更新,则可能存在不一致。
问题:每当我处理订单时,锁定表以防写入是个好主意吗?因此,当上述“循环”发生时,我可以确信没有其他人能够更改产品数量,并且它始终是准确的。
这个想法是产品数量/可用性将始终保持一致,并且永远不会出现库存数量变为 -1 的情况(这将是无法实现的)。
但是,我看到很多关于锁效率低下/效果不佳的帖子。如果是这样,实现这一目标的最佳方法是什么?
我已经看到了在更新 + 选择查询中处理它的替代方法,但也看到它在某些情况下也可能不适合。