MySQL5.7有没有递归功能
时间: 2023-06-29 11:03:27 浏览: 75
MySQL 5.7 版本中没有提供原生的递归功能,但可以通过使用存储过程或者递归查询实现递归操作。
使用存储过程可以实现递归操作,例如:
```
DELIMITER $$
CREATE PROCEDURE recursive_procedure(IN id INT)
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE temp_id INT;
DECLARE cur CURSOR FOR SELECT child_id FROM table_name WHERE parent_id = id;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO temp_id;
IF done THEN
LEAVE read_loop;
END IF;
CALL recursive_procedure(temp_id);
END LOOP;
CLOSE cur;
END $$
DELIMITER ;
```
以上存储过程会递归查询表中指定 id 的子节点。
递归查询可以使用 WITH RECURSIVE 关键字,例如:
```
WITH RECURSIVE cte AS (
SELECT id, parent_id, name, 1 AS level
FROM table_name
WHERE id = 1
UNION ALL
SELECT tn.id, tn.parent_id, tn.name, cte.level + 1
FROM table_name tn
JOIN cte ON tn.parent_id = cte.id
)
SELECT * FROM cte;
```
以上查询会递归查询表中 id=1 的节点的所有子节点,并返回每个节点的 id、parent_id、name 和层数。