Mysql自定义函数遇到的问题

执行自定义函数, 提示用户无权限 !

The user specified as a definer (‘tailai_user’@’%’) does not exist

遇到问题:
因某原因把之前的数据库删掉了,项目重启后重新创建的数据库,用户权限也是新的,但是mysql调用上面函数一直报用户无权限

了解一下:definer和invoker
用来奉告mysql在执行函数(或存储过程)的时候,是以DEFINER用户的权限来执行,还是以调用者的权限来执行。
默认情况下,使用DEFINER方式,此时调用函数的用户必须有函数的EXECUTE权限,并且DEFINER指定的用户必须是在mysql.user表中存在的用户。(这个问题是关键,新创建数据库后,tailai_user@%一直不存在导致报错)

INVOKER模式下,在函数调用时,会检查函数调用者的权限。

解决:
给“@%”添加权限,或者重构函数语句将“@%”删除即可

创建自定义函数备注:

DELIMITER $$ 定义结束符。MySQL默认的结束符是分号,但是函数体中可能用到分号。为了避免冲突,需要另外定义结束符。

DELIMITER $$
  DROP FUNCTION IF EXISTS genPerson$$
  CREATE FUNCTION genPerson(name varchar(20)) RETURNS varchar(50)
  BEGIN
  DECLARE str VARCHAR(50) DEFAULT '';
  SET @tableName=name;
  SET str=CONCAT('create table ', @tableName,'(id int, name varchar(20));');
  return str;
  END $$
DELIMITER ;

附录:
mysql自定义函数

https://www.cnblogs.com/progor/p/8871480.html

https://blog.csdn.net/weixin_39214481/article/details/82752388