当前位置: 首页 > 知识库问答 >
问题:

MySQL(游标/存储过程):错误代码:2013。查询6000.015秒时失去与MySQL服务器的连接

姜俊逸
2023-03-14

平台:MySQL Workbench 8.0 CESQL:5.5.57

我在存储过程上遇到了一些问题。当我调用存储过程时,我总是得到同样的错误2013失去连接。

我尝试过的事情:

  • 增加 DBMS 连接读取超时间隔(60 - 6000 秒):错误代码: 2013年。查询期间查询期间与MySQL服务器的连接丢失
  • 为我的表编制索引
  • 将光标限制为限制 5
  • 在五次迭代后退出循环,如果 i

预先感谢你试图帮助我。遵循存储过程:

USE `personaldb`;
DROP procedure IF EXISTS `austritt_telintern`;

USE `personaldb`;
DROP procedure IF EXISTS `personaldb`.`austritt_telintern`;
;

DELIMITER $$
USE `personaldb`$$
CREATE DEFINER=`root`@`hidden` PROCEDURE 
`austritt_telintern`()
begin
declare i int default 1;
declare x int default 5;

# cursor for personalDB.personalstamm
declare c_finished int default 0;
declare c_persnr int;
declare c_austritt date;
declare CUR_personalstamm cursor for select persnr, austritt from 
personalDB.personalstamm where austritt is not null;

declare continue handler for not found set c_finished = 1;

create index idx_personalstamm_persnr on `personalstamm`(persnr);
create index idx_telefon_persnr on `telefon`(persnr);

open CUR_personalstamm;
    iterate_personalstamm: loop
        fetch CUR_personalstamm into c_persnr, c_austritt;
        if c_finished = 1 then
            leave iterate_personalstamm;
        end if;
        update personalDB.telefon set telefon.gueltig_bis = c_austritt
        where telefon.persnr = c_persnr and telefon.gueltig_bis is null;
        if i <= x then leave iterate_personalstamm;
        end if;
        set i = i + 1;
    end loop iterate_personalstamm;
close CUR_personalstamm;
end$$

DELIMITER ;
;

共有1个答案

欧阳骏俊
2023-03-14

实际的选择/插入代码看起来很简单,应该不会花费那么多时间。

执行以下操作:

  • 在过程之外创建索引。索引创建一次,而过程可以调用多次
  • 不需要时不要序列化查询。在更新中使用连接而不是光标

SQL:

UPDATE telefon
  JOIN personalstamm ON personalstamm.persnr = telefon.persnr
SET telefon.gueltig_bis = personalstamm.austritt
WHERE telefon.gueltig_bis is null
 类似资料:
  • 与我的主题相同有很多问题,但我的内容和问题似乎不同。在我的工作台中,我运行代码 上面的代码工作正常,但当我运行代码b时 我收到错误。 为什么这种情况会发生在我的工作台上? PS:工作台和我的新功能

  • 问题内容: 我收到 错误代码:2013。 当我尝试使用MySQL Workbench向表中添加索引时, 在查询 错误 期间丢失了与MySQL服务器的连接 。我还注意到,只要我运行长时间查询,它就会出现。 是否有增加超时值的方法? 问题答案: 新版本的MySQL WorkBench具有更改特定超时的选项。 对我来说,它位于编辑Preferences首选项SQL SQL编辑器DB DBMS连接读取超时

  • 问题内容: 我收到 错误代码:2013。 当我尝试使用MySQL Workbench向表中添加索引时, 在查询 错误 期间失去了与MySQL服务器的连接 。我还注意到,只要我运行长时间查询,它就会出现。 是否有增加超时值的方法? 问题答案: 新版本的MySQL WorkBench具有更改特定超时的选项。 对我来说,它位于编辑→首选项→SQL编辑器→DBMS连接读取超时(以秒为单位):600 将值更

  • 我得到一个错误,上面写着“错误代码:2013”。当我在工作台上工作时,在查询过程中失去了与MySQL服务器的连接。我把限制从600秒增加到6000秒。然而,它在100秒前失去连接方式。我使用的是工作台6.1。自从我通过创建一个小型表样例来尝试fiddle之后,我的语法就没有问题了。

  • 问题内容: 这个问题已经在这里有了答案 : 7年前关闭。 可能重复: 查询期间失去与MySQL服务器的连接 我正在将一些数据从大型csv导入mysql表。在将文件导入到表的过程中,我丢失了与服务器的连接。 怎么了? 错误代码为2013:在查询过程中失去与mySql服务器的连接。 我正在从Windows服务器上的ubuntu机器远程运行这些查询。 问题答案: 我发现此问题的最简单解决方案是将MySq

  • 问题内容: 我必须导入1go的sql数据,我将max_allowed_pa​​cket调高到1100M以确保。 所以我用: 我的查询 但是一分钟后,它在此过程中停止,我得到了这个错误: 问题答案: 您可能有一些大于最大大小的大插入语句。检查您的/etc/mysql/my.cnf文件或任何位置。不记得默认值是什么- 但是将其设置为类似下面的大值可能会有所帮助。 这是一个选择 也许是另一种方式