关于超卖问题

一直不理解 update product_skus set stock = stock - $amount where id = $id and stock >= $amount 这条 sql 为什么要加最后一个 stock >= $amount 的判断。stock 字段是无符号的整型,不会出现更新后值为负数的情况,已经避免了超卖,为什么还要多此一举加后面的判断呢?今儿又想了想好像理解了。

在测试表 product_skus 中,id 为 1 的商品的库存为 1。

执行 update product_skus set stock = stock - 2 where id = 1 这条 sql 会报错,在项目中使用会抛异常进行回滚事务。

执行 update product_skus set stock = stock - 2 where id = 1 and stock >= 2 这条 sql 不会报错,执行结果为影响的行为 0 条,在项目中执行就提示商品库存不足。

所以加后面的判断,只是为了在商品不足的时候给用户提示,而不是直接回滚事务,啥也不做。各位大佬,是这样吗?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 1

两条语句除了报错区别,作用来看都差不多。 但是后面stock >= 购买数量,逻辑上感觉更加严谨一些。

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!