MySQL 隐藏了我的例程(存储过程)

Posted

技术标签:

【中文标题】MySQL 隐藏了我的例程(存储过程)【英文标题】:MySQL is hiding my Routines (stored procedures) 【发布时间】:2018-08-19 22:55:39 【问题描述】:

mysql 中创建了几个例程后,我回到我的数据库,发现它们不见了,但仍然显示名称。

它说我可能缺乏编辑它们所需的权限,但事实并非如此。我使用创建它们的同一帐户登录,即管理员帐户。

为了查看它们是否在 information_schema 中,我运行了这个:

SELECT routine_definition FROM information_schema.routines WHERE routine_schema = 'databasename';

...但它显示了两个空条目。

我的例程完全没有了吗?创建它们时我做错了什么吗?

我已经使用 MySQL 多年,以前从未发生过这种情况。

编辑: 我刚刚调用了例程,它们确实起作用了……这意味着它们返回了数据。我唯一的问题是我无法查看或编辑代码。

【问题讨论】:

【参考方案1】:

In Motion Hosting 给出了解释。

不幸的是,由于 cPanel 最近的更改,共享主机计划不支持使用 MySQL 例程。虽然可以通过您的 cPanel 凭据通过自定义 phpMyAdmin 安装手动创建它,但 cPanel 提供的界面将不再用于修改例程。如果您需要对例程的支持,则需要升级到 VPS 或更高的计划。

据我了解,MySQL 将例程的安全性设置为“DEFINER”,它通过您的登录来识别您。注销并重新登录后,该 ID 已更改,从而隐藏了您的例程代码。

同样,例程也不会出现在 MySQL 备份中。

【讨论】:

以上是关于MySQL 隐藏了我的例程(存储过程)的主要内容,如果未能解决你的问题,请参考以下文章

TRIGGER 语法错误 mysql 说 #1303 - 无法从另一个存储的例程中创建触发器 - phpmyadmin

如何从 Spring/Hibernate 调用存储的例程/函数?

存储例程

Mysql存储过程导出

MySQL存储过程,处理多个游标和查询结果

mysql之存储过程和触发器的应用