説明
この関数は、特定の名前(str)を持つロックを取得しようと試みます。あるセッションが特定の名前のロックを正常に取得すると、他のどのセッションも同じ名前のロックを取得しようとした場合、元のロック保持セッションがロックを解放するまでブロックされ(待機を強いられます)。
GET_LOCK() 関数で取得したロックは、RELEASE_LOCK() を実行することで明示的に解放できます。それ以外の場合、セッションが正常または異常終了すると、そのセッションが保持していたロックは自動的に暗黙的に解放されます。
注意
GET_LOCK() で取得したロックは、トランザクションのコミットやロールバックによって解放されることはありません。
構文
GET_LOCK('str', timeout)
説明
パラメータの説明
str: ロックの名前を指定します。文字列型です。timeout: ロックの解放を待機するタイムアウト時間(秒単位)を指定します。値は以下のとおりです:- 値は0または正の数にすることができます。
- 負の値を指定すると、待機時間は無限となり、セッションはロックを取得するまで待機し続けます。
戻り値
- 1を返す:ロックが正常に取得されたことを示します。この時点で
GET_LOCKを呼び出したセッションがロックを所有し、ロックが解放されるまで、他の同名のロックを取得しようとする操作はすべて失敗します。 - 0を返す:ロックの取得試行がタイムアウトにより失敗したことを示します。これは通常、ロックが別のセッションによって取得され、タイムアウト期間中に解放されなかったことを意味します。
NULLを返す:ロックの取得試行中にエラーが発生したことを示します。これは、メモリ不足や、ロックを取得しようとしたスレッドが強制終了されたためかもしれません。
例
セッション1で以下のコマンドを実行し、
my_lockという名前のロックを最大10秒待って取得しようとします。obclient [(none)]> SELECT GET_LOCK('my_lock', 10);実行結果は次のとおりです:
+-------------------------+ | GET_LOCK('my_lock', 10) | +-------------------------+ | 1 | +-------------------------+ 1 row in set結果が1を返した場合、ロック
my_lockが正常に取得されたことを示します。セッション2で以下のコマンドを実行し、
my_lockという名前のロックを最大10秒待って取得しようとします。obclient [(none)]> SELECT GET_LOCK('my_lock', 10);実行結果は次のとおりです:
+-------------------------+ | GET_LOCK('my_lock', 10) | +-------------------------+ | 0 | +-------------------------+ 1 row in set結果が0を返した場合、ロック
my_lockの取得試行がタイムアウトにより失敗したことを示します。