mysql5.7递归使用

2020-01-06 15:37:00
1147533288
原创
5693

背景:

服务器使用阿里云centos7+宝塔面板直接安装.新建的mysql用户缺少权限无法创建函数。

报错:This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA。

操作步骤:

1.root用户登录

mysql -u root -p

输入密码

SET GLOBAL log_bin_trust_function_creators=TRUE;


2.mysql客户端用户执行(红色部分跟实际业务表相关)

DELIMITER ;;

CREATE FUNCTION getchildren(orgid CHAR)

RETURNS VARCHAR(4000)

BEGIN

DECLARE oTemp VARCHAR(4000);

DECLARE oTempChild VARCHAR(4000);

 

SET oTemp = '';

SET oTempChild = CAST(orgid AS CHAR);

 

WHILE oTempChild IS NOT NULL

DO

SET oTemp = CONCAT(oTemp,',',oTempChild);

SELECT GROUP_CONCAT(id) INTO oTempChild FROM sys_office WHERE FIND_IN_SET(parent_id,oTempChild) > 0;

END WHILE;

RETURN oTemp;

END;

;;

DELIMITER ;


3.对 find_in_set 这个函数的优化,这个好的办法就是两步查询,切记,否则查询慢大概9s出结果。

      先查出来,放在一个变量中

select getchildren('956b804590f4469392bf7fe10877cb7d') as IDS

把变量拼接到 select 语句中

select * from sys_office a where find_in_set(a.id,#{IDS})>0

文章分类
联系我
联系人: meepo
电话: *****
Email: 1147533288@qq.com
QQ: 1147533288