我的数据库中的数据从0开始。
我的php会根据用户的输入为数据添加1或-1。 我的问题是,如果数据为0并且用户试图减去1.数据变为4294967295 这是INT数据类型的最大值。反正有没有提供数据 即使用户要求-1,也会保持0?谢谢你的回复..
我的sql命令如下所示
update board set score=score-1 where team='TeamA'
//this would generate 4294967295 if the score is 0.....
答案 0 :(得分:9)
是..
UPDATE board SET score = score - 1 WHERE team = 'TeamA' AND score > 0
答案 1 :(得分:3)
update board set score=score-1
where team='TeamA'
and score > 0
答案 2 :(得分:1)
为什么不添加AND SCORE> 0
答案 3 :(得分:1)
Jerry的问题的其他解决方案是使用MySQL“CAST”(如果想要减少数量直到它达到零(但不再是)):
UPDATE board SET score = CAST(score - 1 AS SIGNED) WHERE team = 'TeamA'
答案 4 :(得分:0)
ALTER TABLE board MODIFY score UNSIGNED INT;
答案 5 :(得分:0)
您是否将列设置为无符号?
答案 6 :(得分:0)
如果您使用的是事务性数据库(如InnoDB),则可以执行以下操作:
SQL> START TRANSACTION;
SQL> UPDATE board SET score=score-1 WHERE team="TeamA"
SQL> SELECT @@warning_count as wc
if($row["wc"] > 0) {
$error = true;
SQL> ROLLBACK;
} else
SQL> COMMIT;
这只是逻辑,而不是实际的实现。
对于上述问题,它可能不是很有用,但它适用于您不能允许负数的其他情况,并且您需要引发错误,例如,如果您有购物车并且需要更新所有选定产品的库存数量,您需要一次执行多个UPDATE查询。以上任何解决方案都只是SKIP更新产品,不会返回任何错误消息。当然有很多方法可以防止这种情况(比如在更新之前锁定表并读取数量),但这是一个快速(一个简洁的)解决方案。如果您需要警告代码/说明,可以使用“SHOW WARNINGS”代替“SELECT @@ warning_count”。