You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中如何用单条UPDATE语句将unsigned字段计算负值设为0?

解决方案:单条UPDATE语句实现需求

可以用单条语句实现,问题出在无符号整数的减法溢出:因为counter1是unsigned int类型,当counter1小于要减去的数值时,counter1 - N会得到负数,而无符号整数不允许负数,这就触发了报错。

方法一:先判断再计算(推荐)

通过IF函数先判断counter1是否足够减去目标值,避免产生负数:

UPDATE users
SET counter1 = CASE user_id
    WHEN 2 THEN IF(counter1 >= 2, counter1 - 2, 0)
    WHEN 3 THEN IF(counter1 >= 5, counter1 - 5, 0)
    ELSE counter1
END
WHERE user_id IN(2, 3);

方法二:临时转换为有符号整数

将counter1临时转换为有符号整数,让减法的负数结果合法,再通过GREATEST取最大值0:

UPDATE users
SET counter1 = CASE user_id
    WHEN 2 THEN GREATEST(CAST(counter1 AS SIGNED) - 2, 0)
    WHEN 3 THEN GREATEST(CAST(counter1 AS SIGNED) - 5, 0)
    ELSE counter1
END
WHERE user_id IN(2, 3);

执行结果

两种方法执行后,用户2的counter1会从1变为0,用户3的counter1会从2变为0,完全符合需求。

内容的提问来源于stack exchange,提问作者user3130810

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 22:05:28