表:firm
包含字段:property_level(等级),superior_corp_key(上级企业id)等等
需求介绍:mysql递归update更新表property_level字段,初始节点等级字段property_level值为0,其下面的所有子节点等级字段property_level值依次+1,再获取子节点的子节点等级字段property_level值依次+1
直接复制执行以下命令:
set @@max_sp_recursion_depth = 10;
DELIMITER $$
CREATE PROCEDURE Levels(IN starting_corp_key VARCHAR(255), IN starting_level INT)
BEGIN
DECLARE done BOOLEAN DEFAULT FALSE;
DECLARE a_corp_key VARCHAR(255);
DECLARE cur CURSOR FOR SELECT corp_key FROM firm WHERE superior_corp_key = starting_corp_key;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
UPDATE firm SET property_level = starting_level WHERE corp_key = starting_corp_key;
OPEN cur;
read_loop: LOOP
FETCH cur INTO a_corp_key;
IF done THEN
LEAVE read_loop;
END IF;
CALL Levels(a_corp_key, starting_level + 1);
END LOOP;
CLOSE cur;
END$$
DELIMITER ;
CALL Levels('050001415203XH', 0);
结束语:
在这个示例中,CALL Levels('050001415203XH', 0)表示这将从corp_key
为'050001415203XH'的节点开始递归更新property_level
字段,其下所有子节点的等级字段会依次增加。
请注意,在使用递归函数时,需要小心控制递归深度和性能,以防止出现无限循环或性能问题。同时,确保在对表进行任何更新操作之前,备份好数据以防止意外损失。