2009-11-29 36 views
1

我试图做到这一点在MySQL:递减mysql中去通过零

更新表设定值=值 - 1 WHERE等等等等

如果值是0,这是运行值设置为4294967295 。这是因为它是一个无符号整数,所以它循环回到最大值。

我该如何去使它停留在零而不是?我可以纯粹在SQL中完成这项工作吗?

+0

供参考:整数值之间相减,其中一个类型为UNSIGNED,默认情况下产生一个无符号的结果。如果结果否则会成为最大整数值。如果启用NO_UNSIGNED_SUBTRACTION SQL模式,结果为负数:http://dev.mysql.com/doc/refman/5.1/en/numeric-types.html – 2009-11-29 19:08:24

+0

相关:http://stackoverflow.com/questions/1517556/mysql-query-gone-wild – 2009-11-29 19:08:55

回答

12
`AND value > 0` 
+0

* facepalm *显然。谢谢! – 2009-11-29 19:36:51

0

您可以运行第二个查询或if语句,检查它是否被设置为最大值,并将其设置回0 但这是某种愚蠢的......

写检查条目的快速函数,如果它已经为0,则不执行任何更新查询。

(if value >= 0, do not perform xy)

3
SET value = IF(value=0,0,value-1) 
+0

聪明,但罗布的更简单 – 2009-11-29 18:45:32

+1

是的,这就是为什么他也得到了我的upvote。但它不是唯一可能的解决方案:-) – Joey 2009-11-29 18:48:09

+0

我会用rob的,因为它更简单,但有趣的是,你可以做到这一点。 – 2009-11-29 19:39:45

2

使用WHERE子句说值> 0

周日晚上SQL总是让我心痛了。 :-)

1

只需追加到SQL字符串AND value > 0