0

可能重复:
防止值在 mysql 中变为负数的最佳方法

伙计们,我是这里的新手,也是编程的新手。我正在研究库存控制系统。我将用一个例子来解释我的问题。认为我目前的库存是 500 销售应该从库存减少。当我输入销售额时,如果我输入 1000,则值为 -500。我怎样才能避免这种情况?目前我正在这样做

--php伪代码---

if(stock > sales)
 { stock - sales}

else
 {error}

我的数据类型是浮点数(10,2)。

我可以通过其他方式避免这个问题吗?我不知道我的问题是否清楚。(对不起我语言不好)

4

3 回答 3

3

您的方法看起来不错,但您应该注意,如果多个线程可以同时对数据进行操作,您可能会遇到竞争条件。您可以使用隔离级别设置为可序列化的事务,以确保两个线程不会同时减小值。

您还可以设置列类型unsigned int以确保它永远不会包含负值,但您仍应明确处理此条件。

于 2012-07-08T21:19:00.273 回答
2

Mysql 允许数字列类型为 UNSIGNED,这基本上意味着它不能为负数。我找不到关于它的参考,所以尝试通过这个

于 2012-07-08T21:19:10.307 回答
1

您可以创建一个设置为 0 的临时变量,并在它实际为正时填充它,例如:

$res=0;
if($stock > $sales)
 $res=$stock-$sales

或者简单地说:

$res = $stock > $sales ? $stock - $sales: 0

这样 $res 永远不会低于 0

于 2012-07-08T21:23:37.073 回答