如何解决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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章