最近在做微商城的功能 商城服务这边因为数据库构建不叫早,所以有些地方数据使用了UNSIGNED类型 所以 在执行部分SQL语句的时候会报错
我直接update的sql用了
- UPDATE `stock` SET `stock_real`=`stock_real`-{$num} WEHRE id={$id}
没有做 数量的判断 然后系统直接就报错了,这个可以在where中固定下使用
- UPDATE `stock` SET `stock_real`=`stock_real`-{$num} WEHRE id={$id} AND stock_real > {$num}
但是项目的上一任开发者没有做到这个限制,所以就给代码奔放的跑了;
然后我也就给这奔放的代码加了段
- UPDATE `stock` SET `stock_real`=`stock_real`-(IF(`store`>{$num}, {$num}, 0))
- WEHRE id={$id}
继续让代码奔放的跑吧,只要时间库存不小于0就可以了。
PS:如果业务逻辑需要有验证的话最好是用第二段的加WHERE中限制下,然后开启下事务,防止代码跑偏