2009-04-28 20 views
0

ストアドプロシージャ内のトランザクションは、他のユーザによるテーブルの更新を防ぐためにロックを行いますか?ストアドプロシージャ(ロック/ロールバック)のmysqlトランザクション

また、私は明示的にロールバックロジックに入れる必要がありますか、コミットコマンドに到達しないためにエラーが発生した場合、トランザクションは自動的にロールバックされます。

答えて

0

ストアドプロシージャ内のトランザクションは、他のユーザーがテーブルを更新できないようにロックしますか?

あなたはInnoDBテーブルの上にいくつかDMLを行う

は、影響を受けた行は、トランザクションの終わりまでロックされます(それがストアド・プロシージャ内かそうでない問題ではありません)。

ロックされた行は、ロックされた同じトランザクション内で変更できます。

が明示的にいくつかの行をロックするには、問題:コミットまたはトランザクションをロールバックを除き

SELECT * 
FROM table 
WHERE condition 
FOR UPDATE 

は、

iは明示的に配置する必要があります行のロックを解除する方法が他にありませんまたはコミットコマンドに到達しないためにエラーが発生した場合、トランザクションは自動的にロールバックされます。

明示的にロールバックを実行する必要があります。

+0

私は、トランザクションの期間中、行がロックされたままになっているのかと思います。つまり、複数の更新がある場合は、それぞれの更新後にロックが解放されるか、トランザクション内にあるためにすべての更新が完了した後にのみロックが解放されます。 – richs

+0

ロックはトランザクションの終了時まで保持されます。つまり、ロックの全体的なポイントです。 – Quassnoi

関連する問題