---
title: "トランザクションとは？データベース処理をひとまとまりで扱う考え方【基本情報技術者試験】"
description: "トランザクションを「データベース更新をひとまとまりの処理単位として扱う考え方」として整理し、コミット、ロールバック、ACID特性との関係をFE試験向けに解説します。"
last_modified_at: "2026-07-25"
canonical_url: "https://stemtazoo.github.io/fe/transaction/"
section: "fe"
---

## まず結論

トランザクションとは、**データベースに対する一連の処理を、ひとまとまりの単位として扱う考え方**です。

基本情報技術者試験では、次のように覚えると判断しやすいです。

```text
トランザクション
= 途中で分けてはいけない処理のまとまり
```

たとえば銀行振込では、出金だけ成功して入金が失敗すると困ります。

そのため、出金と入金をまとめて1つのトランザクションとして扱い、  
**全部成功したら確定、途中で失敗したら取り消し** にします。

## 直感的な説明

トランザクションは、銀行振込で考えると分かりやすいです。

AさんからBさんへ1万円を振り込むとします。

このとき、データベースでは少なくとも次の2つの更新が必要です。

```text
1. Aさんの残高を1万円減らす
2. Bさんの残高を1万円増やす
```

もし、1だけ成功して2が失敗するとどうなるでしょうか。

```text
Aさんの残高だけ減る
Bさんの残高は増えない
```

これでは、お金が消えたように見えてしまいます。

そこで、2つの処理を別々に考えるのではなく、  
**1つのまとまり** として扱います。

```text
Aさんの残高を減らす
Bさんの残高を増やす
ここまで全部で1セット
```

この1セットがトランザクションです。

すべて成功すれば、結果を確定します。

途中で失敗すれば、最初から何もなかった状態に戻します。

```text
全部成功   → コミット
途中で失敗 → ロールバック
```

つまり、トランザクションは、データベースに中途半端な更新を残さないための考え方です。

## 定義・仕組み

トランザクションは、データベースに対する複数の処理を、1つの処理単位として扱う仕組みです。

基本的な流れは次のようになります。

```text
トランザクション開始
  処理1
  処理2
  処理3
成功したらコミット
失敗したらロールバック
```

代表的な用語は、次の3つです。

| 用語 | 意味 |
|---|---|
| トランザクション | ひとまとまりとして扱う処理の単位 |
| コミット | 処理結果を確定する操作 |
| ロールバック | 処理を取り消し、処理前の状態へ戻す操作 |

例えば、ネットショップの注文処理では、次のような更新が1つのトランザクションになることがあります。

```text
在庫数を減らす
注文履歴を追加する
請求情報を登録する
```

どれか1つだけ成功して、ほかが失敗すると、データのつじつまが合わなくなります。

そのため、すべて成功したらコミットし、途中で失敗したらロールバックします。

また、トランザクションを安全に扱うための性質として **ACID特性** があります。

| ACID特性 | 意味 |
|---|---|
| 原子性 | 全部実行するか、全く実行しない |
| 一貫性 | データの矛盾を残さない |
| 独立性 | 同時実行しても互いに影響しない |
| 耐久性 | 確定した結果が失われない |

トランザクションは、コミット、ロールバック、ACID特性とセットで理解すると整理しやすくなります。

このテーマは、基本情報技術者試験の「データベース」と関係する内容です。公式の出題範囲やシラバスは、[IPA：基本情報技術者試験](https://www.ipa.go.jp/shiken/kubun/fe.html) から確認できます。

## 科目Aでどう出る？

科目Aでは、トランザクションの意味や、コミット・ロールバック・ACID特性との関係が問われやすいです。

次の表で切り分けると判断しやすくなります。

| 問題文の表現 | 関係する用語 |
|---|---|
| 一連の処理をひとまとまりとして扱う | トランザクション |
| 処理結果を確定する | コミット |
| 処理を取り消して処理前に戻す | ロールバック |
| 完全に行うか、全く行わない | 原子性 |
| データの矛盾を残さない | 一貫性 |
| 同時実行しても結果が乱れない | 独立性 |
| 確定後の結果が失われない | 耐久性 |

特に、トランザクションの問題では、次の表現に注意します。

```text
ひとまとまり
中途半端に残さない
すべて実行するか、すべて取り消す
コミット
ロールバック
```

これらが出てきたら、トランザクション処理を意識します。

## どんな場面で使う？

問題文では、トランザクションという用語を選ぶだけでなく、処理の流れを読ませる形で出ることがあります。

見るポイントは、次の3つです。

```text
1. どこからどこまでが1つの処理単位か
2. どの時点でコミットされるか
3. 失敗したときにどこまでロールバックされるか
```

例えば、次のような処理を考えます。

```text
トランザクション開始
  在庫数を減らす
  注文履歴を追加する
  請求情報を登録する
コミット
```

この場合、コミットまで到達すれば、3つの更新が確定します。

もし、請求情報の登録で失敗した場合は、在庫数の更新や注文履歴の追加も取り消す必要があります。

```text
在庫数を減らす
注文履歴を追加する
請求情報で失敗
  → ロールバック
  → 在庫数も注文履歴も処理前へ戻す
```

問題文では、処理を1行ずつ追うだけでなく、
**どこまでが1つのトランザクションか** を見ることが大切です。

トランザクションの範囲を見落とすと、どの更新が確定し、どの更新が取り消されるのかを間違えやすくなります。

## よくある誤解・混同

### 誤解1：1つのSQL文だけがトランザクションだと思う

トランザクションは、必ずしも1つのSQL文だけとは限りません。

複数の更新処理をまとめて、1つのトランザクションとして扱うことがあります。

```text
在庫を更新する
注文を登録する
請求を登録する
```

このように、業務上まとめて成功・失敗を判断したい処理が、トランザクションになります。

### 誤解2：処理が始まったら必ず確定すると考える

トランザクション中の処理は、コミットされるまでは確定とは限りません。

途中でエラーが起きれば、ロールバックで取り消されることがあります。

```text
処理した
でも、まだコミットしていない
  → 確定とは限らない
```

試験では、コミットされたかどうかを確認します。

### 誤解3：ロールバックは最後の処理だけを取り消すと思う

ロールバックは、基本的に対象のトランザクションを処理前の状態に戻す操作です。

最後の1処理だけを取り消すというより、トランザクション全体を戻すイメージです。

```text
処理A
処理B
処理Cで失敗
ロールバック
  → 処理A、処理Bも含めて取り消す
```

この考え方は、ACID特性の **原子性** と関係します。

### 誤解4：トランザクションとACID特性を別々に覚える

トランザクションとACID特性は、別々に丸暗記するより、セットで理解した方が安全です。

| 観点 | 何を見る？ |
|---|---|
| トランザクション | どこからどこまでが1つの処理か |
| コミット | どこで確定するか |
| ロールバック | 失敗時にどこまで戻るか |
| ACID特性 | その処理が安全に扱われているか |

トランザクションが処理の単位で、ACID特性はその処理を安全に行うための性質です。

## まとめ（試験直前用）

- トランザクションは、一連の処理をひとまとまりで扱う単位
- 全部成功したらコミットして確定する
- 途中で失敗したらロールバックして処理前に戻す
- 中途半端な更新を残さないことが重要
- ACID特性、コミット、ロールバックとセットで覚える
