MySQL manual on ALTER FUNCTIONは言う:MySQLのストアドファンクションをアトミックに置き換える方法はありますか?
しかし、あなたはこの文を使用して保存された関数のパラメータまたは本文を変更することはできません。そのような変更を行うには、DROP FUNCTIONとCREATE FUNCTIONを使用して関数を削除して再作成する必要があります。
DROP + CREATEを使用する際の問題は、2つのステートメントの間に関数が存在しない短い時間間隔が存在することです。これが大量のデータベースである場合、これは、このタイムパンで実行中にストアド関数を使用するクエリが失敗することを意味します。
MySQL manual on implicit commitsストレス
のALTER FUNCTIONこと、FUNCTIONおよびDROP FUNCTIONをCREATEも保存された機能
で使用した場合、暗黙的なコミットを引き起こすだから、2つの、問題文をラップするだけには役立ちません。取引で
PostgreSQLはこれに対してCREATE OR REPLACE FUNCTIONを提供しています。 MySQLの問題をどのように解決するのですか?
私はこれが可能であるとは思わない。 –
解決しようとしている問題はわかりませんが、mysqlのストアドファンクションを絶えず削除して再作成する方法は解決できません。私はこれが単なる「アップグレード/メンテナンス中」という質問になることを願っています。そうであれば、トランザクションはジョブを実行する必要があります。また、LOCKを使用してテーブルをロックすることもできます。 – gview
@gview:トランザクションは機能しません。「問題のある2つのステートメントをトランザクションでラップするのは役立たない」を参照してください。 LOCKはテーブルへのアクセスのみを防止するため、関数の実行ではないため、どちらも機能しません。確かにそれはたまにしか起こらないが、それは重い義務のデータベースであり、短時間の間は関数が存在しない間はクエリのエラーを得る余裕がない。 – rtc