如何在MySQL中实现deleted字段0和1值的切换更新?
解决MySQL中翻转0/1字段的UPDATE语句问题
嗨,这个需求在MySQL里其实有好几种简洁的实现方式,我给你整理了几个最常用的方案:
算术运算(最简洁)
因为你的deleted字段只有0和1两个取值,直接用1 - deleted就能实现翻转逻辑,代码如下:UPDATE posts SET deleted = 1 - deleted;原理很简单:如果当前值是0,计算后就是1;如果当前是1,计算后就是0,完美匹配你的需求。
CASE WHEN语句(可读性最强)
如果你希望逻辑更直观,方便后续维护时一眼看懂,可以用CASE WHEN明确写出判断逻辑:UPDATE posts SET deleted = CASE WHEN deleted = 0 THEN 1 ELSE 0 END;这种写法把“如果当前是0就设为1,反之设为0”的逻辑直接翻译成了SQL,非常清晰。
位运算(巧妙的技巧)
利用异或(XOR)运算的特性:0和1异或结果是1,1和1异或结果是0,也能实现翻转:UPDATE posts SET deleted = deleted XOR 1;这个写法比较巧妙,适合熟悉位运算的开发者使用。
注意:如果不需要更新全表的
deleted字段,一定要加上WHERE子句来指定目标行,比如UPDATE posts SET deleted = 1 - deleted WHERE id = 123;,避免误操作全表数据。
内容的提问来源于stack exchange,提问作者Martin AJ
相关产品推荐
相关产品推荐

