如何解決BIGINT UNSIGNED value is out of range

前言

近日一早上都在解決數據庫的問題,這是新遇到的一個報錯,特此記錄一下。

正文

背景:需要在sql中之間執行類似:

UPDATE {$table} SET point=point-{$point} WHERE `id`={$id}

突然發現要被減去的point的數目是大於數據庫中存儲的。不是前文沒做檢驗是因爲前文sql寫錯了,導致的這裏id錯了,所以扣到了一個已經被扣光的記錄(即point=0)裏頭,由於設置了unsigned,0-1肯定報錯。

出現了!

BIGINT UNSIGNED value is out of range

解決辦法:

1.不能接受取絕對值的解決方式:

UPDATE {$table} SET point=point-(IF(point>{$point}, {$point}, 0)) WHERE `id`={$id}

2.可以接受取絕對值得解決方式

UPDATE {$table} SET point=(abs(cast(point as signed)-{$point})) WHERE `id`={$id}
發佈了93 篇原創文章 · 獲贊 152 · 訪問量 43萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章