2

一个好用的update语句

 7 months ago
source link: https://shidawuhen.github.io/2023/10/03/%E4%B8%80%E4%B8%AA%E5%A5%BD%E7%94%A8%E7%9A%84update%E8%AF%AD%E5%8F%A5/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一个好用的update语句

2023-10-03

做过很多项目、实现过很多奇葩的需求,最近遇到一个比较有意思的功能,要求对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;

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK