2 つのアプリケーションがあり、どちらも MySQL で同じストアド プロシージャを使用しています。この手順を同期させたいと思います。つまり、1 つのアプリケーションがそれを呼び出している間、もう 1 つのアプリケーションは待機する必要があります。
アプリケーションのコードを変更せずにこれを行う方法はありますか (つまり、ストアド プロシージャを変更するだけです)。
ありがとう、クリシー
2 つのアプリケーションがあり、どちらも MySQL で同じストアド プロシージャを使用しています。この手順を同期させたいと思います。つまり、1 つのアプリケーションがそれを呼び出している間、もう 1 つのアプリケーションは待機する必要があります。
アプリケーションのコードを変更せずにこれを行う方法はありますか (つまり、ストアド プロシージャを変更するだけです)。
ありがとう、クリシー
これは、アプリケーション コードを変更せずにストアド プロシージャ内で行うことができますが、ロックの問題とタイムアウトの可能性が生じることに注意してください。
と を使用GET_LOCK()
しRELEASE_LOCK()
て同期を処理します。実行GET_LOCK
して、ストアド プロシージャの開始時に同期を実行し、RELEASE_LOCK
完了したら:
IF (GET_LOCK('lock_name_for_this_SP', 60)) THEN
.... body of SP
RELEASE_LOCK('lock_name_for_this_SP');
ELSE
.... lock timed out
END IF
また、他の問題が発生しないように、アプリケーションのタイムアウトがロックのタイムアウトよりも長くなるように注意する必要があります。