MySQL多条件更新列值异常:预期更新7行仅成功1行求助
SQL更新语句问题排查指引
先确认运算符优先级(你的语句逻辑本身无歧义,但可以优化写法)
SQL中AND优先级高于OR,你的语句实际执行逻辑和预期的两个条件组一致:(occupation = 'Model' AND bonus = 155.99) OR (givenname = 'Mary' AND bonus = 155.99)为了彻底避免歧义,建议手动添加括号明确分组:
UPDATE customers SET bonus = 505.99 WHERE (occupation = 'Model' AND bonus = 155.99) OR (givenname = 'Mary' AND bonus = 155.99);重点排查浮点数值精度问题
如果bonus是FLOAT或DOUBLE类型,这类浮点型存储的是近似值,直接用= 155.99会匹配不到实际值接近但有微小精度差异的行。可以用两种方式解决:
方法1:范围匹配(推荐)UPDATE customers SET bonus = 505.99 WHERE (occupation = 'Model' AND bonus BETWEEN 155.989 AND 155.991) OR (givenname = 'Mary' AND bonus BETWEEN 155.989 AND 155.991);方法2:用ROUND函数统一精度
UPDATE customers SET bonus = 505.99 WHERE (occupation = 'Model' AND ROUND(bonus, 2) = 155.99) OR (givenname = 'Mary' AND ROUND(bonus, 2) = 155.99);先查询验证再执行更新
先执行SELECT语句确认符合条件的行数,避免直接更新踩坑:SELECT COUNT(*) FROM customers WHERE (occupation = 'Model' AND bonus = 155.99) OR (givenname = 'Mary' AND bonus = 155.99);如果查询返回1行,说明数据本身只有1行符合条件;如果返回7行,再检查更新语句的执行权限或数据库事务是否未提交。
内容的提问来源于stack exchange,提问作者char
相关产品推荐
相关产品推荐

