mysql5.7递归使用
- 2020-01-06 15:37:00
- 1147533288 原创
- 5695
背景:
服务器使用阿里云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 |