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

MySQL触发#1365除零警告,已限制upvotes范围却仍出现?

解决MySQL UPDATE语句中的“Division by 0”警告问题
  • 警告根源:你认为upvotes + downvotes绝不会为0,但实际是满足WHERE条件的行中存在upvotes + downvotes = 0的情况——比如downvotes为负数,刚好和范围在9-12之间的upvotes抵消,导致计算score时分母为0。

  • 定位问题行:先执行SELECT语句找出触发警告的异常数据:

SELECT id, upvotes, downvotes, mature_upvotes 
FROM memes 
WHERE ((mature_upvotes / upvotes) * 100) < 15 
AND upvotes > 8 
AND upvotes < 13 
AND (upvotes + downvotes) = 0;

这条语句会直接筛选出符合WHERE条件且分母为0的行,你可以检查这些行的downvotes是否为负数。

  • 修复方案:在计算score时添加防除以0的兜底逻辑,用IF函数规避异常:
UPDATE memes 
SET upvotes = upvotes + 1, 
    score = ROUND((upvotes * 100) / IF(upvotes + downvotes = 0, 1, upvotes + downvotes)) 
WHERE ((mature_upvotes / upvotes) * 100) < 15 
AND upvotes > 8 
AND upvotes < 13;

如果upvotes + downvotes为0,就用1作为分母避免警告。如果业务不允许downvotes为负,也可以先修正这些异常数据,再执行原UPDATE语句。

  • 补充说明:你更新单条mature_upvotes=0的行未触发警告,是因为那一行的upvotes + downvotes不为0,不存在除以0的场景。

内容的提问来源于stack exchange,提问作者TheGreatCornholio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 01:50:07