WITH RECURSIVE test AS (
SELECT 1 AS n
UNION ALL
SELECT 1+n FROM test WHERE n < 10
)
SELECT * FROM test ;
老师,我还是不理解为什么自引用能触发循环,如果多次调用了这个表达式本身,不是会产生多个1吗?,还有就是如果在工作中使用公共表表达式不小心漏写了限制条件引发了死循环,会不会导致服务器死机
老师,我还是有个疑惑:
如果第一个SELECT(SELECT 1 AS n)生成cte的初始行,应该表达式中产生一行n=1的数据,此时执行第二个select(SELECT 1+n FROM test WHERE n < 10)
第一种想法:他是直接调用这个cte中的n=1的数据去执行 n+1得到了2,但是为什么会无限循环下去,是mysql本身的机制,自引用会产生递归,无限循环下去直到返回空值吗?因为我看你写评论树的公共表表达式没有写限制条件
第二种想法:如果是再次执行了这个表达式,那第一个select 又会再执行一次,那么不是会产生多个1么?
这是我的两种想法,请问我是不是想错了