19.1.3 递归CTE的限制

本文讨论了MySQL中递归公共表表达式(CTE)的限制,指出递归CTE需要包含终止条件,否则系统会依据cte_max_recursion_depth和max_execution_time参数自动终止查询。当cte_max_recursion_depth达到默认的1000次时,或者SQL执行时间超过max_execution_time默认的0ms(无限制)时,MySQL将抛出错误。建议在使用递归CTE时,应在查询语句中明确设置递归终止条件。
摘要由CSDN通过智能技术生成
19.1.3 递归CTE的限制

递归CTE的查询语句中需要包含一个终止递归查询的条件。当由于某种原因在递归CTE的查询语句中未设置终止条件时,MySQL会根据相应的配置信息,自动终止查询并抛出相应的错误信息。在MySQL中默认提供了如下两个配置项来终止递归CTE。

·cte_max_recursion_depth:如果在定义递归CTE时没有设置递归终止条件,当达到cte_max_recursion_depth参数设置的执行次数后,MySQL会报错。

·max_execution_time:表示SQL语句执行的最长毫秒时间,当SQL语句的执行时间超过此参数设置的值时,MySQL报错。

例如,如下未设置查询终止条件的递归CTE,MySQL会抛出错误信息并终止查询。


mysql> WITH RECURSIVE cte_num(num) AS
    -> (
    -> SELECT 1
    -> UNION ALL
    -> SELECT n+1 FROM cte_num
    -> )
    -> SELECT * FROM cte_num;
ERROR 3636 (HY000): Recursive query aborted after 1001 iterations. Try in
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值