我有一个这样的查询:如何保护无符号列防止负数?
UPDATE users SET reputation = reputation - 2 WHERE id = :id
它有时抛出一个错误,当电流reputation
是0
。由于reputation
列是unsigned
。有什么想法我该如何解决这个问题?
我有一个这样的查询:如何保护无符号列防止负数?
UPDATE users SET reputation = reputation - 2 WHERE id = :id
它有时抛出一个错误,当电流reputation
是0
。由于reputation
列是unsigned
。有什么想法我该如何解决这个问题?
使用GREATEST()
:
UPDATE users SET reputation = GREATEST(reputation - 2, 1) WHERE id = :id
如果reputation
是zerofill
,然后。
您可以使用CASE WHEN
设定值,如果它是一个正值或负值的默认值:
UPDATE users
SET reputation = (CASE WHEN (reputation - 2 >= 0) THEN reputation - 2 ELSE 0 END)
WHERE id = :id
您可以在ELSE
部分设置默认值,如果该值低于0(在这种情况下为0
)。
由于@stack在他的答案已经提到的,你可以使用GREATEST
(而不是CASE WHEN
):
UPDATE users
SET reputation = GREATEST(reputation - 2, 0)
WHERE id = :id
如果你不想UPDATE
在这种情况下,您可以检查WHERE
上的值:
UPDATE users
SET reputation = reputation - 2
WHERE id = :id
AND (reputation - 2) >= 0