MySQL中SET后加AND为何不触发语法错误?
关于MySQL UPDATE语句中SET后使用AND的问题
你看到的这条语句:
UPDATE mytable SET deleted = 1 AND name = 'Cindy'
MySQL并没有忽略AND,而是把它当成逻辑运算符来处理了——这是合法语法,但基本都是无意的错误写法。
实际执行逻辑
这条语句等价于:
UPDATE mytable SET deleted = (1 AND (name = 'Cindy'))
在MySQL里,布尔值true用1表示,false用0表示:
- 当记录的
name等于'Cindy'时,name = 'Cindy'结果为1,1 AND 1等于1,deleted会被设为1 - 当
name不等于'Cindy'时,name = 'Cindy'结果为0,1 AND 0等于0,deleted会被设为0
是否有实际用途?
这种写法几乎没有合理的实际场景,正常更新多个字段应该用逗号分隔,比如:
UPDATE mytable SET deleted = 1, name = 'Cindy'
如果你的测试数据里所有记录的name都是'Cindy',确实会看到deleted全被设为1,看起来和预期结果一致,但这只是巧合,换一批数据就会暴露逻辑错误。
内容的提问来源于stack exchange,提问作者Paulo Fernando
相关产品推荐
相关产品推荐

