最終更新日:2026年7月15日
fe fe-technology database
まず結論
コミットとは、トランザクションの処理結果を確定する操作です。
ロールバックとは、途中で失敗した処理を取り消し、トランザクション開始前の状態に戻す操作です。
基本情報技術者試験では、次のように切り分けます。
| 用語 | 意味 | 判断の合図 |
|---|---|---|
| コミット | 処理結果を確定する | 正常終了、確定、反映 |
| ロールバック | 未確定の処理を取り消す | 異常終了、取消し、処理前へ戻す |
特に重要なのは、SQLを実行したかではなく、コミットされたかを見ることです。
全部成功した
→ COMMIT
途中で失敗した
→ ROLLBACK
直感的な説明
ネットショップの注文処理を考えます。
1. 在庫数を減らす
2. 注文履歴を追加する
3. 請求情報を登録する
3つすべてが成功したら、コミットして結果を確定します。
一方、請求情報の登録で失敗したのに、在庫だけ減った状態を残すと困ります。
そこで、在庫数や注文履歴の変更も含めて取り消し、処理前へ戻します。これがロールバックです。
コミット
→ これで確定
ロールバック
→ なかったことに戻す
定義・仕組み
トランザクションとは、データベースに対する一連の処理を、ひとまとまりとして扱う単位です。
例えば銀行振込では、出金と入金をまとめて扱います。
トランザクション開始
Aさんの残高を減らす
Bさんの残高を増やす
コミット
途中で問題が起きた場合は、ロールバックして両方の更新を取り消します。
トランザクション開始
Aさんの残高を減らす
Bさんの残高を増やす途中で失敗
ロールバック
この仕組みにより、中途半端な状態が残ることを防ぎます。
| 操作 | 何をする? | 関係が深いACID特性 |
|---|---|---|
| コミット | 更新結果を確定する | 永続性 |
| ロールバック | 処理前へ戻す | 原子性 |
ロールバックは、全部実行するか、全部実行しないかという原子性を支える操作です。
このテーマは、基本情報技術者試験の「データベース」と関係する内容です。公式の出題範囲やシラバスは、IPA:基本情報技術者試験 から確認できます。
科目Aでどう出る?
科目Aでは、コミット・ロールバック・原子性の意味だけでなく、異常終了後に表がどうなるかを問われます。
判断の手順は次のとおりです。
1. どのSQLが実行されたか確認する
2. 正常終了か異常終了か確認する
3. コミットされたか確認する
4. 未確定ならロールバック後の状態を選ぶ
DELETE後に異常終了した場合
例えば、次のSQLを実行したとします。
DELETE FROM 商品
WHERE 商品コード = 'B020';
正常終了してコミットされれば、B020 の行は削除されます。
しかし、デッドロックなどでトランザクションが異常終了した場合、削除はロールバックされます。
DELETEを実行
↓
B020を削除しようとする
↓
デッドロックで異常終了
↓
ロールバック
↓
B020の行は元に戻る
ここで注意したいのは、DELETE は列の値を NULL にする命令ではないことです。
行全体を削除する
→ DELETE
列の値をNULLにする
→ UPDATE ... SET 列名 = NULL
デッドロックが起きた場合
デッドロックは、複数のトランザクションが互いに相手のロック解除を待ち、処理を進められなくなる状態です。
トランザクションA
→ データ1をロック
→ データ2の解除待ち
トランザクションB
→ データ2をロック
→ データ1の解除待ち
DBMSは通常、どちらかのトランザクションを中止してデッドロックを解消します。中止された側の未確定の更新はロールバックされます。
試験では、デッドロックが起きたら、異常終了した側の更新は残らないと判断します。
どんな場面で使う?
コミットとロールバックは、複数の更新をまとめて整合性を保ちたい処理で使います。
- 銀行振込
- 商品注文
- 在庫更新
- 会員登録
- 複数表を同時に更新する処理
例えば、注文処理では、在庫更新だけ成功して注文履歴の登録に失敗する状態を避ける必要があります。
すべて成功
→ コミット
どこかで失敗
→ ロールバック
よくある誤解・混同
誤解1:SQLを実行した時点で更新は確定している
SQLを実行しても、コミット前なら未確定です。
更新した
でもコミットしていない
→ まだ確定ではない
試験では、コミットされたかどうかを確認します。
誤解2:ロールバックは最後の1処理だけを取り消す
基本的には、対象トランザクション内の未確定処理をまとめて取り消します。
処理A
処理B
処理Cで失敗
→ AとBも含めて取り消す
誤解3:DELETEすると列の値がNULLになる
DELETE は条件に合う行全体を削除します。
列の値だけを変更するのは UPDATE です。
誤解4:ロールバックとロールフォワードは同じ
| 用語 | 役割 |
|---|---|
| コミット | 更新結果を確定する |
| ロールバック | 未確定の更新を取り消す |
| ロールフォワード | ログを使って確定済み更新を再実行する |
ロールバック
→ 戻す
ロールフォワード
→ 進めて復旧する
誤解5:デッドロックでも途中の更新は残る
デッドロックで中止されたトランザクションの未確定更新は、通常ロールバックされます。
異常終了
→ 未確定更新は確定しない
→ 処理前へ戻る
まとめ(試験直前用)
- コミットは、トランザクションの処理結果を確定する操作
- ロールバックは、異常終了時に未確定の更新を処理前へ戻す操作
- SQLを実行したかではなく、コミットされたかを見る
DELETEは行全体を削除し、UPDATE ... SET NULLとは異なる- デッドロックで中止された側の未確定更新はロールバックされる
- ロールバックは原子性、コミット後の保持は永続性と関係が深い
- ロールフォワードは、確定済み更新をログから再実行する復旧処理