我有一个查询:
update `shops` set
`points` = `points` - 2,
`updated_at` = '2019-04-17 23:07:11'
where `id` = 4;
列点的列类型为:BIGINT(20)。
现在在记录中,我的值为62。运行上面的查询时,出现此错误:
SQLSTATE [22003]:数值超出范围:1690 BIGINT UNSIGNED 值超出了'(`database`.`shops`.`points`-2)'
不一样。
答案 0 :(得分:1)
您不能以无符号整数存储负值。较安全的解决方案是在执行减法之前检查操作数:
SET points = CASE WHEN points >= 2 THEN points - 2 ELSE 0 END
或者简单地:
SET points = points - LEAST(points, 2)
答案 1 :(得分:0)
这将起作用:
set `points` = `points` - cast(2 AS SIGNED)
和
`updated_at` = '2019-04-17 23:07:11'