一个好用的update语句

做过很多项目、实现过很多奇葩的需求,最近遇到一个比较有意思的功能,要求对mysql表中的数据,不同的行更新不同的值。

以前数据量比较少的时候,可能就提交多行update语句了,如下

UPDATE users
SET status = 'Minor'
WHERE age < 18;

UPDATE users
SET status = 'Adult'
WHERE age >= 18 AND age < 65;

UPDATE users
SET status = 'Senior'
WHERE age >= 65;

但是现在行数很多,怎么处理呢?mysql有个不错的update语句

UPDATE users
SET status = 
    CASE
        WHEN age < 18 THEN 'Minor'
        WHEN age >= 18 AND age < 65 THEN 'Adult'
    END;

这个语句,可以将满足条件的行赋予指定的数值,但是该语句,有个极大的风险,对于不在该范围内的行,会设置为默认值。为了解决这个问题,需要对该语句进行一定的改造

UPDATE users
SET status = 
    CASE
        WHEN age < 18 THEN 'Minor'
        WHEN age >= 18 AND age < 65 THEN 'Adult'
        ELSE status  -- 不在条件范围内的行保持原始的 status 值,不进行更新
    END;

这样修改之后,就只会影响在范围之内的行了。

所以,大家使用新的语句的时候,一定需要查清楚使用规则,不要因为不熟悉导致很大的问题。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值