我正在运行以下查询:
Update xyz
SET `bal`=`bal`-100
WHERE `bal`>'100'
AND user='pqr'
数据库引擎:InnoDB
用户的余额是否有可能低于0,我想如果用户打开同时在两个标签中运行查询的页面。我是否需要采取措施防止负余额问题,或者是否由数据库自动处理。
感谢。
答案 0 :(得分:2)
除非MySQL隐式将'100'
强制转换为数字,否则此查询 会导致错误的结果。 where语句与 string 值'100'
进行比较,而不是整数100。&#39; 20&#39; <按字母顺序大于'100'
,因此它可以通过过滤器。
答案 1 :(得分:0)
从此查询中,余额不能为零:
"Update xyz SET `bal`=`bal`-100 WHERE `bal`>100 AND user='pqr'"
因为它只选择余额> 100的条目。大于100 - 100的数字不能低于零。
我猜您的专栏bal
是一个数字字段,最好删除100周围的引号。
答案 2 :(得分:0)
bal不会小于0.它将始终大于零。从你的代码中可以清楚地看到'bal'&gt; 100
Update xyz
SET `bal`=`bal`-100
WHERE `bal`>'100'
AND user='pqr'