MySQL(5.7)通过mysql.proc删除存储过程

时间:2018-03-14 11:23:49

标签: mysql stored-procedures

摘要:从MySQL 5.7开始可以安全地使用DELETE from mysql.proc吗?

在问题Drop all stored procedures in MySQL or using temporary stored procedures中,有人提到在MySQL中不可能在存储过程中使用DROP PROCEDURE(mysql错误代码1357,“不能从内部删除或改变%s另一个存储的例程“)。

根据经验:

DELETE from mysql.proc WHERE db = <db-name> AND name LIKE '<procedure-prefix>%';

确实可以正常工作。

在评论中,提出了问题(但没有回答):

  

mysql.proc仍然是5.7中与MySQL元信息交互的可行方法吗?

即使我完全意识到它不是“可取的”,在MySQL 5.7中使用它是否“OK”?或者,DROP PROCEDURE是否有一些重要的东西,这样我就不能使用这种解决方法?

1 个答案:

答案 0 :(得分:1)

delete表中的直接procs似乎不会在当前的MySQL会话中立即生效。

在MySQL中使用flush语句来使服务器重新加载内容(通过更新/删除直接更改权限,flush privileges可能是最好的类比)。但是,根据文档,我找不到任何会影响存储过程的flush版本。所以,我认为没有办法在当前的MySQL会话中删除存储的proc final。

直接删除方法的真正危险在于它依赖于MySQL的未记录功能。在未来版本的MySQL中,此功能可能会在没有任何通知的情况下发生变化,从而无法升级。此外,如果没有实际调试MySQL本身,很难说你的方法是否有任何意想不到的副作用。

由于这些原因,我不建议在生产代码中使用此方法。如果是一次性的练习,那么你可以侥幸逃脱。

相关问题