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

mysql 遞歸 報錯

錢浩然2年前10瀏覽0評論

MySQL的遞歸語句常用于處理樹形結構的數據,但是在實際使用中會遇到各種問題,其中之一就是報錯。下面我們來看一下如何解決這個問題。

首先需要確認報錯信息,常見的錯誤提示有:

ERROR 3568 (HY000): Recursive common table expression support not yet available for InnoDB temporary tables
ERROR 4049 (HY000): Not allowed to automatically create temporary table
ERROR 1420 (HY000): Recursive limit %d (as set by the MAX_RECURSION_DEPTH 
system variable) was exceeded for statement

第一個錯誤提示表示,在使用InnoDB臨時表時,暫時不支持使用遞歸CTE語法。

在解決第二個錯誤提示時,可以修改MySQL的配置文件,找到“sql-mode”選項,將其設置為“ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION”。

第三個錯誤提示是遞歸次數超過了MySQL的默認遞歸次數(1000次),需要在執行遞歸語句前,通過“set max_sp_recursion_depth = n;”命令將遞歸次數設置為更大的值。

除了以上情況,還有可能是由于遞歸語句本身的錯誤導致的。比如,在遞歸調用時需要注意加上條件,否則可能會出現死循環。

with temp(id, name, parent_id) as (
select id, name, parent_id from employee where id = 1
union all
select e.id, e.name, e.parent_id from employee e
join temp t on t.id = e.parent_id
)
select * from temp where parent_id = 0;

在上面的例子中,如果父子關系出現循環,就會陷入死循環。可以通過設置遞歸次數的方法來解決。

總之,MySQL的遞歸語句在處理樹形結構的數據時是非常方便的。但是在使用過程中,需要注意報錯信息,對錯誤進行逐一排查。只有正確處理了報錯信息,才能真正使用它的威力。