我有一個這樣的查詢:如何保護無符號列防止負數?
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