最終更新日:2026年7月27日
fe fe-technology database
まず結論
共有ロックは主に読み取り用、専有ロックは主に更新用のロックです。
基本情報技術者試験では、次のように切り分けます。
共有ロック同士
→ 共存できる
共有ロックと専有ロック
→ 共存できない
専有ロック同士
→ 共存できない
つまり、
共有ロック同士だけは両立し、専有ロックが関わる組合せは両立しない
と覚えると判断しやすくなります。
直感的な説明
同じ資料を複数人で読む場面を考えます。
読む人A
読む人B
読むだけなら、同じ資料を同時に見ても問題ありません。
これが共有ロック同士の状態です。
一方、誰かが資料を書き換えている途中に別の人が読んだり、同時に別の内容へ書き換えたりすると、内容が食い違う可能性があります。
読む × 読む
→ 同時にできる
読む × 書く
→ 同時にできない
書く × 読む
→ 同時にできない
書く × 書く
→ 同時にできない
共有ロックを「読む」、専有ロックを「書く」と置き換えるとイメージしやすいです。
定義・仕組み
共有ロック
共有ロックは、主にデータを読み取るときに使うロックです。
複数のトランザクションが同じデータを読むだけなら、同時に利用できます。
T1:共有ロックを取得
T2:共有ロックを取得
→ 可能
ただし、共有ロック中のデータを別のトランザクションが更新することはできません。
専有ロック
専有ロックは、主にデータを更新するときに使うロックです。
対象データを更新している間は、ほかのトランザクションによる読み取りや更新を防ぎます。
T1:専有ロックを取得
T2:共有ロックを取得
→ 不可
T2:専有ロックを取得
→ 不可
ロックの両立性
| すでに掛かっているロック | 新たに共有ロック | 新たに専有ロック |
|---|---|---|
| 共有ロック | ○ | × |
| 専有ロック | × | × |
試験では、この表をそのまま覚えるよりも、次の1行を残すと便利です。
共有+共有だけ○
それ以外は×
ロック待ち
必要なロックを取得できない場合、トランザクションは既存のロックが解除されるまで待ちます。
T1が専有ロック中
↓
T2はロックを取得できない
↓
T1の終了まで待つ
この状態をロック待ちと呼びます。
このテーマは基本情報技術者試験のデータベース分野に含まれます。公式の出題範囲は、IPA:基本情報技術者試験から確認できます。
科目Aでどう出る?
科目Aでは、共有ロックと専有ロックの両立性を問う選択問題がよく出ます。
選択肢を切る判断表
| 選択肢の表現 | 判断 |
|---|---|
| 共有ロック中に、別の共有ロックを取得できる | 正しい |
| 共有ロック中に、専有ロックを取得できる | 誤り |
| 専有ロック中に、共有ロックを取得できる | 誤り |
| 専有ロック中に、別の専有ロックを取得できる | 誤り |
試験中は、次の順番で判断します。
1. 既に掛かっているロックを確認
2. 新たに取得したいロックを確認
3. 共有+共有かどうかを見る
4. 共有+共有なら可、それ以外は不可
読み取りと更新に置き換える
用語だけで迷ったら、次のように置き換えます。
共有ロック
→ 読み取り
専有ロック
→ 更新
すると、
読む × 読む
→ 可
書くが含まれる
→ 不可
と判断できます。
どんな場面で使う?
同時実行時のデータ保護
複数の利用者が同じデータを同時に扱うシステムでは、ロックが必要です。
例えば、在庫数が10個の商品を2人が同時に購入するとします。
T1:2個購入
T2:3個購入
適切なロックがなければ、片方の更新が上書きされ、在庫数が正しく反映されないことがあります。
更新時に専有ロックを使うことで、同時更新による矛盾を防ぎます。
検索と更新の制御
検索だけを行う処理では共有ロック、データを書き換える処理では専有ロックを使います。
SELECT中心の処理
→ 共有ロック
UPDATE・DELETEなどの更新処理
→ 専有ロック
ただし、実際のDBMSでは分離レベルや実装方式によって挙動が異なるため、試験では問題文の前提を優先します。
よくある誤解・混同
共有ロックなら更新もできる
できません。
共有ロックは読み取り用であり、更新には専有ロックが必要です。
専有ロック中でも、読み取りだけならよい
基本的にはできません。
専有ロック中は、そのトランザクションが対象資源を独占しています。
共有ロックは1つしか取得できない
違います。
複数のトランザクションが同じ資源に共有ロックを取得できます。
ロック待ちとデッドロックは同じ
違います。
ロック待ち
→ ほかのトランザクションの終了を待つ
デッドロック
→ 複数のトランザクションが互いのロック解除を待ち続ける
例えば、T1が資源A、T2が資源Bをロックしたまま、互いに相手の資源を待つとデッドロックになります。
二相ロックは共有ロックと専有ロックの2種類を使うこと
違います。
二相ロックは、
ロックを獲得する段階
↓
ロックを解放する段階
の2段階に分ける方式です。
共有ロックと専有ロックの2種類を指す言葉ではありません。
まとめ(試験直前用)
- 共有ロックは主に読み取り、専有ロックは主に更新に使う
- 共有ロック同士だけは同時に取得できる
- 専有ロックが関わる組合せは両立しない
- 迷ったら「読む×読むだけ可」と考える
- ロック待ちとデッドロックを混同しない