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
相关产品推荐
相关产品推荐

