You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 05:22:07