行レベルおよびテーブルレベルのロック、楽観的および悲観的ロック

InnoDBはデフォルトで行レベルのロックなので、主キーが「明示的に」指定されている場合、MySQLは行ロックのみを実行します(選択したデータのみをロックします)。それ以外の場合、MySQLはテーブルロックを実行します(データフォーム全体をロックします)。 )。

例:
idとnameの2つのフィールドを持つフォーム製品があり、idが主キーであるとします。
例1:(主キーを明示的に指定し、このデータ、行ロックを持つ)

SELECT * FROM WHERE WHERE id = '3' FOR UPDATE;

例2:(そのようなデータがない場合、ロックがない場合は、主キーを明示的に指定します)

SELECT * FROM products WHERE id = '-1' FOR UPDATE;

例2:(主キーなし、テーブルロック)

SELECT * FROM products WHERE name = 'Mouse' FOR UPDATE;

例3:(主キーが明確でない、テーブルロック)

SELECT * FROM WHERE WHERE id <> '3' FOR UPDATE;

例4:(主キーが明確でない、テーブルロック)

SELECT * FROM WHERE id LIKE '3' for UPDATE;


楽観的および悲観的ロック戦略
悲観的ロック:データの読み取り時に数行をロックします。これらの行に対する他の更新は、悲観的ロックの終了が続行できるまで待機する必要があります。
オプティミスティック:データを読み取るときにロックされていません。更新時に、データが更新されているかどうかを確認してください。更新されている場合は、現在の更新をキャンセルしてください。通常、悲観的ロックの待機時間が長すぎて受け入れられない場合は、楽観的ロックを選択します。

公開された23元の記事 ウォンの賞賛2 ビュー5235

おすすめ

転載: blog.csdn.net/bianlitongcn/article/details/105530820