MySQL存储过程实现递归查询(mysql存储过程递归)
在数据库MySQL中,存储过程是支持任务运算和流程控制的一种复合语句集合,可以是一个完整的脚本,可以构建为编程语言中函数的库。存储过程可以实现批量修改和操作,实现简单的增删改查的脚本,还可以实现一些复杂的操作,比如基于递归的查询。
例如,假设有如下一个MySQL数据表,记录数据表中每个记录的父子关系:
| id | pid | name |
| — | —- | —– |
| 1 | 0 | tom |
| 2 | 1 | jack |
| 3 | 2 | sara |
| 4 | 3 | ken |
实现这个数据表中每个记录的递归查询,可以通过MySQL的存储过程实现。步骤如下:
首先,创建一个useage存储过程:
“`mysql
DROP PROCEDURE IF EXISTS useage;
–创建存储过程
CREATE PROCEDURE useage (
IN parent_id INT
)
BEGIN
— 定义递归查询的SQL
DECLARE sql_recursive VARCHAR(255);
SET sql_recursive=
CONCAT(‘SELECT id, pid, name FROM ‘,
‘(SELECT * FROM table WHERE pid=’,parent_id,’ UNION ALL’,
‘ SELECT id, pid, name FROM ‘,
‘(SELECT * FROM table WHERE pid=parent_id))’);
— 执行递归查询
PREPARE stmt1 FROM sql_recursive;
EXECUTE stmt1;
END;
“`
然后,执行存储过程,实现数据表中每个记录的递归查询。
“`mysql
CALL useage(1);
最后,查询结果如下:
| id | pid | name || --- | ---- | ----- |
| 1 | 0 | tom || 2 | 1 | jack |
| 3 | 2 | sara || 4 | 3 | ken |
由此可见,通过MySQL存储过程,可以实现基于递归的查询操作。通过调用存储过程,可以完成相应的脚本编写,实现灵活的查询操作。