【ひかんてきろっく】
悲観的ロック とは?
💡 「衝突するかもしれない」と慎重に構えて、読み取り時からロックをかける方式
📌 このページのポイント
悲観的ロックって具体的にどう書くの?
どんな場面で使うの?
典型的なのは在庫管理。「在庫を確認→在庫を減らす」の間に他の人も同じ在庫を減らすと、実際より多く売れてしまう(オーバーセリング)。FOR UPDATEで在庫行をロックすれば、確認と減算の間に他の処理が割り込めないから安全なんだ。
ロックしている間、他のリクエストはどうなるの?
ロックが解放されるまで待たされる。ロック取得のタイムアウトを設定しておかないと、永遠に待ち続ける可能性もある。「NOWAIT」オプションを付けるとロックが取れなければ即エラーにできるし、「SKIP LOCKED」で他がロック中の行をスキップすることもできるよ。
デッドロックってどういう状態?
まとめ:ざっくりこれだけ覚えればOK!
悲観的ロックって出てきたら「読み取り時からロックをかけて他の変更をブロック、競合が多い場面向け」と思えばだいたいOK!
📖 おまけ:英語の意味
「Pessimistic Locking」 = 悲観的な(Pessimistic)ロック(Locking)
💬 「衝突するかもしれない」と悲観的に考え、事前にロックをかけて防ぐ方式