Mysql 8.0:如何更改过程定义器

Posted

技术标签:

【中文标题】Mysql 8.0:如何更改过程定义器【英文标题】:Mysql 8.0: How to Alter Procedure Definer 【发布时间】:2019-11-26 10:20:06 【问题描述】:

我们很容易将例程/SP 定义器更新到 5.7,但在 8.0 中我们无法找到确切的命令。我在下面运行但不工作。另请注意,我们无法生成脚本并手动更新它然后重新执行脚本。我们有大约 3500 个实时服务提供商,我们无法承受任何停机时间。有什么解决办法吗?

ALTER  PROCEDURE sng.sp_get_profile_search_2_test SQL SECURITY
DEFINER=`root`@`localhost`

ALTER  PROCEDURE sng.sp_get_profile_search_2_test SQL SECURITY
DEFINER='root'@'localhost'

【问题讨论】:

定义者名称不能改,只能将SQL SECURITY改成DEFINER or INVOKER,mysql-docs 【参考方案1】:

示例:

UPDATE `mysql`.`procedure` pro SET definer = 'user@%' WHERE definer='root@%'

【讨论】:

记住:它是 8.0 版本错误代码:1146 表 'mysql.procedure' 不存在 更新 sng.sp_get_profile_search_2_test SET DEFINER = 'dbname@localhost';【参考方案2】:

试试这个:

UPDATE sng.sp_get_profile_search_2_test SET DEFINER = 'dbname@localhost';

【讨论】:

错误代码:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在附近使用的正确语法

以上是关于Mysql 8.0:如何更改过程定义器的主要内容,如果未能解决你的问题,请参考以下文章

庖丁解牛-图解MySQL 8.0优化器查询转换篇

30.4. MySQL函数,存储过程,触发器,视图

mysql-8.0 安装教程(自定义配置文件,密码方式已修改)

如何将入口点过程从“WinMain”更改为“main”或任何自定义函数?

如何实现一个自定义属性包装器,它将发布 SwiftUI 的更改以重新呈现它的视图

navicat 8.0 mysql中如何调用存储过程