MySQL如何用单条UPDATE语句实现多WHERE条件下同列更新
问题答案
可以用单条UPDATE语句实现需求,借助CASE条件表达式即可完成不同规则的赋值,语法如下:
UPDATE 表名 SET recent = CASE WHEN ID = 555 THEN 1 ELSE 0 END;
上述语句会将ID为555的行recent字段设为1,其余所有行的recent字段统一设为0,完全匹配你先全局重置为FALSE、再给指定行设为TRUE的业务逻辑,天然保证全局只有一行recent为TRUE的约束。
如果你的表数据量较大,想要优化更新性能,可以额外增加WHERE条件,仅处理需要变更的行,避免无意义的全表更新:
UPDATE 表名 SET recent = CASE WHEN ID = 555 THEN 1 ELSE 0 END WHERE recent = 1 OR ID = 555;
增加WHERE条件后,语句只会更新原本recent值为1的行,以及目标ID为555的行,执行效率更高,最终效果和全表更新完全一致。
内容的提问来源于stack exchange,提问作者user14352137
相关产品推荐
相关产品推荐

