摘要:从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
是否有一些重要的东西,这样我就不能使用这种解决方法?
答案 0 :(得分:1)
delete
表中的直接procs
似乎不会在当前的MySQL会话中立即生效。
在MySQL中使用flush语句来使服务器重新加载内容(通过更新/删除直接更改权限,flush privileges
可能是最好的类比)。但是,根据文档,我找不到任何会影响存储过程的flush
版本。所以,我认为没有办法在当前的MySQL会话中删除存储的proc final。
直接删除方法的真正危险在于它依赖于MySQL的未记录功能。在未来版本的MySQL中,此功能可能会在没有任何通知的情况下发生变化,从而无法升级。此外,如果没有实际调试MySQL本身,很难说你的方法是否有任何意想不到的副作用。
由于这些原因,我不建议在生产代码中使用此方法。如果是一次性的练习,那么你可以侥幸逃脱。