中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

漾濞| 定日县| 隆德县| 天镇县| 中牟县| 清镇市| 南昌县| 大余县| 麻栗坡县| 平度市| 阿坝| 明溪县| 南木林县| 安国市| 高要市| 拜城县| 含山县| 三穗县| 华宁县| 区。| 大荔县| 赞皇县| 旅游| 定南县| 华安县| 林州市| 曲沃县| 赤城县| 阿坝县| 上犹县| 渭南市| 峡江县| 松阳县| 曲麻莱县| 上蔡县| 石狮市| 静宁县| 马山县| 乐亭县| 济源市| 奎屯市|