前言
近日一早上都在解决数据库的问题,这是新遇到的一个报错,特此记录一下。
正文
背景:需要在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}
如果你觉得有收获~可以关注我的公众号【咖啡色的羊驼】~第一时间收到我的分享和知识梳理~