千家信息网

MYSQL 中怎么利用递归查询解决死循环

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,MYSQL 中怎么利用递归查询解决死循环,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。下面是一个递归死循环的例子这里先解释一下CTE
千家信息网最后更新 2026年10月31日MYSQL 中怎么利用递归查询解决死循环

MYSQL 中怎么利用递归查询解决死循环,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

下面是一个递归死循环的例子

这里先解释一下CTE 递归

1 递归查询至少包含两个子查询, 第一个查询的目的是设置递归的初始值

2 第二个查询成为递归查询,第二个查询调用第一个查询的结果,然后开始循环

之间通过union all 来连接.

递归查询中,当查询的结果不匹配,或超过了递归次数就会停止. 或者在执行是系统发现是死循环则会在设定好的最大cte_max_recursion_depth 后终止查询.

递归查询中出现3636的问题,分为两种

1 数据出现问题 (这是引起递归出现问题的常见原因)

2 SQL 递归的撰写有问题

根据1 出现问题的概率比较大,并且比较难以排查, 这里就需要在写SQL 的时候,添加一些语句来避免递归出现问题.

1 方法一, 使用distinct ,通过在union 后面添加distinct 来将重复的数据去掉,大部分死循环是因为有重复的数据,这样可以查出数据. 但问题是在 WORKBENCH 中是可以的,但将语句在 MYSQL 程序中是报错的,这点我也没法解释.

2 方法 在MYSQL 8.109 引入了 LIMIT 语句,通过LIMIT 来限制输出数据的数量,投机取巧的避免了部分 3636 的错误

这个方式在workbench 和 MYSQL 命令符下都是OK 的.

实际当中,可能用的最多的是另外一种方式,自动设置让死循环结束

WITH RECURSIVE cte_all AS

(

SELECT dname AS Child

FROM cte_test

WHERE rname='Tim'

UNION all

SELECT r.dname

FROM cte_test r, cte_all d

WHERE r.rname=d.Child

)

SELECT /*+ MAX_EXECUTION_TIME(1000) */ * FROM cte_all;

这样的写法在workbench 是OK 的,但在MYSQL 命令行中是还是不可以

当然绕来绕去,最关键的还是修复导致死循环的数据

在修复数据后,在此执行查询,问题解决.

关于MYSQL 中怎么利用递归查询解决死循环问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

查询 递归 问题 循环 数据 方法 语句 命令 方式 更多 结果 还是 帮助 解答 解释 易行 最大 投机取巧 简单易行 两个 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网金融科技 广州紫鲸互联网科技有限公司 互联网科技公司起名 互联网金融公司科技 浩特互联网科技 北京禾田雨橡互联网科技 广州紫鲸互联网科技 互联网前沿科技 重庆科技学院互联网 安控科技rtu产品工业互联网 互联网金融科技公司干啥的 南山科技园互联网公司有哪些 成都铂石互联网科技做什么的 山东星卡互联网科技有限公司官网 互联网企业科技类企业如何做账 风投北京互联网科技 东营紫格互联网科技 云鲸互联网络科技有限公司 科技和互联网行业的特点 广东猫王互联网科技有限公司电话 互联网科技工作委员会副主任毛军 今日互联网科技 紫鲸互联网科技 浩特互联网科技 朗涯互联网科技 苏州大垚互联网科技 湖北码尼互联网科技有限公司电话 每天都有哪些好的互联网科技 安徽九吞吴互联网科技有限公司 前海云享互联网科技
0