欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

mysql 遞歸無限極下級

老白2年前10瀏覽0評論

介紹

MySQL 作為主流關系型數據庫,為了應用方便,其對遞歸查詢提供了多種方式支持。其中較為常見的方式是使用遞歸公用表表達式(Recursive Common Table Expression)

基本語法

遞歸查詢需要用到 with recursive,一般形式如下:

with recursive [遞歸公用表表達式名稱] [列名列表] as (select [初始查詢語句] union all select [遞歸查詢語句]) select [輸出列名列表] from [遞歸公用表表達式名稱];

其中的 select 語句可以嵌套使用,以實現類似于樹的遍歷功能,從而完成對無限極下級的查詢。

示例

例如我們需要查詢某個分類的所有下級,可以使用以下語句:

with recursive category_tree as ( select id, name, parent_id from category where id=1 union all select c.id, c.name, c.parent_id from category_tree ct join category c on ct.id=c.parent_id ) select * from category_tree;

在這里我們以 id=1 的分類為例,使用 union all 吸收所有下級分類,最后通過 select * 來查詢所有相關數據。

遞歸深度限制

為了避免無休止的遞歸查詢可能導致的內存消耗、性能下降等問題,MySQL 8.0.1 版本開始支持遞歸深度限制。該特性默認開啟,可以通過設置遞歸查詢最大深度(Recursive Query Max Depth)調整。設置方法如下:

SET @@cte_max_recursion_depth=n;

其中 n 表示可遞歸的最大深度,如果遞歸深度大于該值,將會拋出錯誤。