关于公共表达式,recursive自引用为啥会触发循环
来源:6-39 【实战】 公共表表达式-1

慕莱坞3268959
2019-11-11
WITH RECURSIVE test AS (
SELECT 1 AS n
UNION ALL
SELECT 1+n FROM test WHERE n < 10
)
SELECT * FROM test ;
老师,我还是不理解为什么自引用能触发循环,如果多次调用了这个表达式本身,不是会产生多个1吗?,还有就是如果在工作中使用公共表表达式不小心漏写了限制条件引发了死循环,会不会导致服务器死机
写回答
1回答
-
sqlercn
2019-11-12
首先来说在公共表表达式中如果不小心写了死循环是不会引发宕机的,因为数据库本身可能通过max_sp_recursion_depth变量对循环是有最大次数限制的。那么既然知道是对一个表达式的循环,那么在这个表达式中n是一个变量,是会随着嵌套调用而累加的。所以才会出现一开始是n=1 而后就是n=n+1这样的累加效果。
022019-11-13
相似问题