91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MYSQL 中怎么利用遞歸查詢解決死循環

發布時間:2021-07-13 14:53:41 來源:億速云 閱讀:397 作者:Leah 欄目:大數據

MYSQL 中怎么利用遞歸查詢解決死循環,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

下面是一個遞歸死循環的例子

MYSQL 中怎么利用遞歸查詢解決死循環

這里先解釋一下CTE 遞歸

1  遞歸查詢至少包含兩個子查詢, 第一個查詢的目的是設置遞歸的初始值

2  第二個查詢成為遞歸查詢,第二個查詢調用第一個查詢的結果,然后開始循環

之間通過union all 來連接.

遞歸查詢中,當查詢的結果不匹配,或超過了遞歸次數就會停止. 或者在執行是系統發現是死循環則會在設定好的最大cte_max_recursion_depth 后終止查詢.

MYSQL 中怎么利用遞歸查詢解決死循環

遞歸查詢中出現3636的問題,分為兩種

1  數據出現問題 (這是引起遞歸出現問題的常見原因)

2  SQL 遞歸的撰寫有問題 

根據1 出現問題的概率比較大,并且比較難以排查, 這里就需要在寫SQL 的時候,添加一些語句來避免遞歸出現問題.

1  方法一, 使用distinct ,通過在union 后面添加distinct 來將重復的數據去掉,大部分死循環是因為有重復的數據,這樣可以查出數據. 但問題是在 WORKBENCH 中是可以的,但將語句在  MYSQL 程序中是報錯的,這點我也沒法解釋.

MYSQL 中怎么利用遞歸查詢解決死循環

MYSQL 中怎么利用遞歸查詢解決死循環

2  方法 在MYSQL 8.109 引入了 LIMIT 語句,通過LIMIT 來限制輸出數據的數量,投機取巧的避免了部分 3636 的錯誤

MYSQL 中怎么利用遞歸查詢解決死循環

MYSQL 中怎么利用遞歸查詢解決死循環

這個方式在workbench 和 MYSQL 命令符下都是OK 的.

實際當中,可能用的最多的是另外一種方式,自動設置讓死循環結束

MYSQL 中怎么利用遞歸查詢解決死循環

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 中怎么利用遞歸查詢解決死循環

當然繞來繞去,最關鍵的還是修復導致死循環的數據

MYSQL 中怎么利用遞歸查詢解決死循環

在修復數據后,在此執行查詢,問題解決.

關于MYSQL 中怎么利用遞歸查詢解決死循環問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

湛江市| 拉萨市| 乐昌市| 滦平县| 辰溪县| 鹤山市| 来宾市| 同仁县| 开江县| 达州市| 白城市| 章丘市| 阿鲁科尔沁旗| 浪卡子县| 行唐县| 榆社县| 彩票| 贵阳市| 孝感市| 长乐市| 牙克石市| 越西县| 清远市| 吕梁市| 平舆县| 昌平区| 竹溪县| 汨罗市| 云林县| 徐水县| 绥棱县| 长沙市| 嘉鱼县| 乐至县| 蓬安县| 和林格尔县| 乐业县| 黄陵县| 金塔县| 岐山县| 谷城县|