一个好用的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;

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

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

你可能感兴趣的:(存储,后端)