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

MySQL循环插入3的倍数报错:Error:2013连接丢失问题排查

问题分析与修复

你的存储过程存在两个致命问题,直接引发了连接超时断开的错误:

1. 无限循环触发超时

初始@var = 10,10无法被3整除,所以if @var % 3 = 0的分支永远不会执行,@var的值始终保持10,循环会无限运行下去。MySQL检测到长时间无响应的查询后,就会触发Error:2013 Lost connection to MySQL server during query错误并断开连接。

2. 插入逻辑完全错误

就算某个值满足被3整除的条件,你先执行了set @var = @var+1再插入,这会导致插入的是原本能被3整除的数加1,结果反而不是3的倍数,完全违背了你的需求。


修正后的存储过程代码

Delimiter &&
create procedure multThree()
Begin
set @var = 10;
generate_data: loop
    -- 先判断是否到达终止条件,避免最后一次循环遗漏判断
    if @var >= 100 then
        leave generate_data;
    end if;
    
    -- 满足条件则插入当前值
    if @var % 3 = 0 then
        insert into div_table values (@var);
    end if;
    
    -- 每次循环都递增变量,彻底避免无限循环
    set @var = @var + 1;
 end loop generate_data;
End &&

修正说明:

  • 每次循环先检查是否到达100,到达就退出循环
  • 满足被3整除时直接插入当前@var的值,保证插入的是正确的3的倍数
  • 无论是否满足条件,每次循环都递增@var,彻底避免无限循环

你也可以用WHILE循环实现,逻辑会更直观:

Delimiter &&
create procedure multThree()
Begin
set @var = 10;
while @var < 100 do
    if @var % 3 = 0 then
        insert into div_table values (@var);
    end if;
    set @var = @var + 1;
end while;
End &&

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 12:45:35