MySQL:如何以原子方式修改存储过程?

Xav*_*_Ex 6 mysql stored-procedures distributed-system

我通过互联网搜索,并了解更改商店程序正文的唯一方法是删除并再次创建它.该机制似乎没有任何问题,但如果我有一个客户端应用程序(或数千个分布式客户端)不断调用存储过程来更新服务器数据库上的某些数据,则删除该过程将导致数据丢失和/或损坏.

我在想是否有类似"CREATE PROCEDURE IF EXIST ..."的语法或类似的功能,因此更新操作将顺利进行.但我没有发现MySQL中有这样的东西.

那么你们怎么认为这个问题可以解决?真棒的想法?

Dav*_* Z. 4

您无法修改 MySQL 中的存储过程(尽管您可以更改其特征)。从ALTER PROCEDURE页面。

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

虽然执行此更新时可能会丢失数据(尽管它应该是一个相对较小的窗口),但您的数据不太可能被损坏。如果您的系统需要防止数据库停机造成的数据丢失,我会考虑一下消息队列技术。