做过很多项目、实现过很多奇葩的需求,最近遇到一个比较有意思的功能,要求对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;
这样修改之后,就只会影响在范围之内的行了。
所以,大家使用新的语句的时候,一定需要查清楚使用规则,不要因为不熟悉导致很大的问题。