亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

化州市| 积石山| 凌云县| 鄂托克前旗| 余庆县| 通河县| 上饶市| 阳东县| 汉川市| 封开县| 成武县| 莱西市| 灵台县| 乌拉特后旗| 积石山| 甘洛县| 临猗县| 常德市| 西吉县| 呼玛县| 海盐县| 云梦县| 佛山市| 富源县| 察隅县| 白银市| 望江县| 湖州市| 江阴市| 翼城县| 齐齐哈尔市| 绍兴县| 巴马| 景洪市| 五指山市| 阜阳市| 温泉县| 宣威市| 屏南县| 交口县| 石屏县|