MySQL:如何原子化修改存储过程?

6
我已经搜索了互联网,了解到更改存储过程的唯一方法是删除并重新创建它。机制似乎没有问题,但如果我有一个客户端应用程序(或成千上万个分布式客户端)不断调用存储过程来更新服务器数据库中的数据,则删除该过程将导致数据丢失和/或损坏。
我在思考是否有类似于“IF EXISTS CREATE PROCEDURE…”的语法或类似功能,以便顺利执行更新操作。然而,我在MySQL中没有找到这样的东西。
那么你们认为这个问题该如何解决?有什么好的想法吗?

由于MySQL没有事务性DDL,我认为这是不可能的。 - user330315
1个回答

4
在 MySQL 中,您无法修改存储过程(虽然可以更改其特征)。参见ALTER PROCEDURE页面。

此语句可用于更改存储过程的特征。在 ALTER PROCEDURE 语句中可以指定多个更改。但是,您不能使用此语句更改存储过程的参数或主体;要进行此类更改,必须使用 DROP PROCEDURE 和 CREATE PROCEDURE 删除并重新创建该存储过程。

尽管在执行此更新时可能会丢失数据(但这应该是一个相对较小的时间窗口),但您的数据不太可能损坏。如果您的系统需要防止由于数据库停机而导致数据丢失,请查看消息队列技术。

数据被损坏是指数据库的完整性...你说得很对,所以我们可以在数据库上面添加一个单独的层来监视数据交易,而不是把所有工作都放在数据库上。 - Xavier_Ex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接