トランザクションとは?
トランザクションとは、データベース上で行われる一連の操作を「ひとまとまりの処理単位」として扱い、すべて成功するか、すべて失敗して元に戻すかのどちらかで完結させる仕組みです。
たとえば、銀行の送金処理では
「口座Aから引き落とす」→「口座Bに振り込む」
という複数の操作が、片方だけ成功してもう片方が失敗すると問題になるため、トランザクションとしてまとめて扱います。
ACID特性とは?
データベーストランザクションは、以下の ACID という4つの性質を満たすことが求められます。
| 性質 | 内容 |
|---|---|
| Atomicity(原子性) | 全部の処理が完了するか、まったく実行されないかのどちらかという「不可分なまとまり」である性質です。 |
| Consistency(一貫性) | トランザクション実行後も規則(制約)に合った整合性のある状態を保ちます。 |
| Isolation(独立性) | トランザクション処理中の変更は、コミットされるまで他の処理から見えないようにする性質です。 |
| Durability(永続性) | 一度コミットされた変更は、システム障害が発生しても消えず保存され続ける保証です。 |
トランザクションのライフサイクル
トランザクションは一般に以下の手順で処理されます。
- Begin(開始)
- Execute(操作の実行)
- Commit(正常完了・保存)
- Rollback(異常時に中止し元に戻す)
日常例でわかるトランザクション
例えば、オンラインバンキングでの送金処理:
- 口座Aからお金を引き落とす
- 口座Bにお金を振り込む
この2つが両方きちんと完了しなければ、トランザクションとしては失敗扱いとなり、処理全体が取り消されます。
トランザクションはどんな場面で使われる?
トランザクションは、特に「一部だけ成功して中途半端になると困る」処理に必要です。
たとえば:
トランザクションと「クエリ」の違い
- クエリ:データの取得や更新など、単一のSQL操作
- トランザクション:複数のクエリを束ねて「まとめて成功 or 失敗」にする処理単位
トランザクションがないとどうなる?
トランザクション処理を使わない場合、部分的に処理が成功し、データの不整合が発生しやすくなります。
たとえば、送金処理の途中でエラーが起こって、引き落としだけが実行されてしまう…など。後々の調査や修復が大変になります。
応用:分散トランザクションや長期トランザクション
複数のDBやマイクロサービスをまたいで処理を行う場合、分散トランザクション(two-phase commit 等)を使用して整合性を確保します。
また、ユーザーの操作をまたぐような長時間かかる処理を 長期トランザクション として扱う設計もあります。
まとめ
トランザクションは、データベースの信頼性と整合性を守るための「すべてか無か」の仕組み。
ACID特性を満たすことでデータ破壊や不整合を防ぎ、安心・安全なデータ処理を可能にします。
初心者でもまずは「複数の処理をまとめて扱って、失敗したら戻せばいいんだな」と理解することが第一歩です。


