2012-04-23 1 views
5

私はインターネットを通じて検索し、ストアプロシージャの本体を変更する唯一の方法は、それをもう一度削除して作成することだということを理解しています。このメカニズムには何も問題はないようですが、ストア・プロシージャーを呼び出してサーバー・データベースの一部のデータを更新し続けるクライアント・アプリケーション(または何千もの分散クライアント)があると、プロシージャーをドロップするとデータが失われたり破損したりします。MySQL:ストアドプロシージャをアトミックに変更する方法は?

"CREATE PROCEDURE IF EXIST ..."のような構文があるか、同様に機能して更新操作がスムーズに行われると思っています。しかし、私はそのようなものがMySQLで利用可能であるとは思わなかった。

どのようにこの問題に対処できると思いますか?素晴らしい考え?

+0

MySQLにトランザクションDDLがないため、これは可能ではないと思います。 –

答えて

3

MySQLでストアドプロシージャを変更することはできますが、その特性を変更することはできません。 ALTER PROCEDUREページより

このステートメントを使用して、保存された プロシージャの特性を変更できます。 ALTER PROCEDURE ステートメントに複数の変更が指定されている可能性があります。ただし、このステートメントを使用して ストアドプロシージャのパラメータまたは本文を変更することはできません。そのような変更を行うには、DROP PROCEDUREとCREATE PROCEDUREを使用して、 プロシージャを削除して再作成する必要があります。

この更新を実行している間にデータを失う可能性はありますが(比較的小さいウィンドウではありますが)、データが破損する可能性は低いです。私はあなたのシステムがデータベースのダウンタイムからのデータ損失を守る必要があるなら、メッセージ待ち行列技術を見ていきます。

+0

データが壊れていると私はデータベースの完全性を意味しています...あなたは良い点があるので、データベースにすべての作業を置く代わりに、データトランザクションを見逃すために別のレイヤーを上に置くことができます。 –

関連する問題