如何在mysql数据库中避免减去值

时间:2012-07-08 21:16:00

标签: php mysql

  

可能重复:
  Best way to prevent a value from going negative in mysql

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

- php伪代码---

if(stock > sales)
 { stock - sales}

else
 {error}

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

我能以其他方式避免这个问题吗?我不知道我的问题是否清楚。 (抱歉我的语言能力差)

3 个答案:

答案 0 :(得分:3)

您的方法似乎很好,但您应该注意,如果多个线程可以同时对数据进行操作,则可能存在竞争条件。您可以使用隔离级别设置为可序列化的事务来确保两个线程不会同时减少该值。

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

或简单地说:

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

这样$ res永远不会低于0