最終更新日:2026年8月30日
sg sg-technology database
まず結論
排他制御とは、複数の処理が同じデータを同時に更新して不整合が起きないようにする仕組みです。
SG試験では、次の3つを切り分けると判断しやすくなります。
- 同時更新を防ぐ仕組み → 排他制御
- データや資源を一時的に使用中にする手段 → ロック
- 互いにロック解除を待ち続ける状態 → デッドロック
「他のトランザクションを待たせる」「同じデータの同時更新を防ぐ」と書かれていたら、排他制御を疑います。
直感的な説明
排他制御は、1つしかない会議室を使うイメージです。
Aさんが会議室を使っている間、Bさんは勝手に入らず、Aさんが使い終わるまで待ちます。
データベースでも同じように、ある処理がデータを更新している間は、別の処理を待たせることで更新の衝突を防ぎます。
このとき「使用中」とする仕組みがロックです。
つまり、
- 排他制御:同時に使わせないという考え方・制御
- ロック:そのために使う代表的な手段
と考えると分かりやすいです。
定義・仕組み
排他制御は、トランザクション処理において、同じデータへの同時アクセスを制御し、データの整合性を保つために使われます。
たとえば、在庫が1個だけ残っている商品を2人が同時に購入しようとした場合を考えます。
- Aさんが在庫数「1」を読み取る
- Bさんも在庫数「1」を読み取る
- Aさんが購入して在庫を「0」にする
- Bさんも購入できたと判断する
これでは、在庫が1個しかないのに2人へ販売することになりかねません。
排他制御では、Aさんの処理中に対象データをロックし、Bさんの処理を待たせるなどして、このような更新の衝突を防ぎます。
ロックとの関係
| 用語 | 役割 |
|---|---|
| 排他制御 | 同じデータを同時に操作させず、整合性を保つ制御 |
| ロック | 対象データや資源を一時的に使用中として制限する手段 |
「排他制御=ロック」と完全に同じ意味で覚えるより、排他制御を実現する代表的な方法がロックと整理すると混同しにくくなります。
デッドロックとの違い
ロックを使うと、複数の処理がお互いのロック解除を待ち続け、先に進めなくなることがあります。
これがデッドロックです。
たとえば、
- 処理A:データXをロックし、データYの解放を待つ
- 処理B:データYをロックし、データXの解放を待つ
という状態です。
| 用語 | 判断ポイント |
|---|---|
| 排他制御 | 同時更新による不整合を防ぐ |
| ロック | データや資源を一時的に使用中にする |
| デッドロック | 複数の処理が互いの解除を待ち、停止する |
どんな場面で使う?
排他制御は、複数の利用者や処理が同じデータを更新する場面で重要です。
代表例は次のとおりです。
- 銀行口座の残高更新
- ECサイトの在庫更新
- 座席予約
- チケット販売
- 複数利用者による同一レコードの更新
特に、在庫や残高のように同時更新で値がずれると困るデータでは、排他制御が必要です。
よくある誤解・混同
誤解1:排他制御とデッドロックは同じ
違います。
- 排他制御:不整合を防ぐための制御
- デッドロック:ロックの取り方などによって処理が互いに待ち続ける問題
デッドロックは、排他制御を行う中で注意すべき現象です。
誤解2:排他制御と正規化は同じ
正規化は、データの重複を減らし、扱いやすい表構造に整理する考え方です。
排他制御は、同時処理による更新の衝突を防ぎます。
- 表の設計 → 正規化
- 同時更新 → 排他制御
誤解3:排他制御と整合性制約は同じ
整合性制約は、主キーや外部キー、NULL制約などによって、不正な値や関係を防ぐルールです。
排他制御は、複数処理が同じデータへ同時にアクセスするときの衝突を防ぎます。
- 入力値や参照関係のルール → 整合性制約
- 同時アクセスの制御 → 排他制御
誤解4:排他制御と再編成は同じ
再編成は、データベースの物理的な配置や空き領域などを整理する処理です。
排他制御とは目的が異なります。
まとめ(試験直前用)
- 排他制御=同じデータの同時更新による不整合を防ぐ
- ロック=排他制御を実現する代表的な手段
- デッドロック=互いのロック解除を待ち続ける状態
- 正規化=表の構造を整理する
- 整合性制約=不正な値や参照関係を防ぐ
- SG試験では、「同時更新」「待たせる」「ロック」が出たら排他制御を疑う