ページに広告が含まれる場合があります。
トランザクションとは?
トランザクションとは、複数の処理をひとまとまりとして扱う単位のことです。
例えば、「商品を購入したら在庫を減らし、売上記録を残す」など、一連の処理がすべて成功して初めて意味を成す場合があります。途中で処理が失敗すると、整合性が崩れてしまう恐れがあるため、**「すべて成功」または「すべて無効」**にする必要があります。
これを実現するのが、**「コミット(確定)」と「ロールバック(取り消し)」**です。
トランザクションの基本的な流れ
正常に処理が終わった場合
START TRANSACTION;
INSERT INTO A〜;
INSERT INTO B〜;
INSERT INTO C〜;
COMMIT;
START TRANSACTION
でトランザクションを開始- 複数の
INSERT
文でデータを登録 COMMIT
で処理内容を確定してDBに反映
処理をキャンセルする場合
START TRANSACTION;
INSERT INTO A〜;
INSERT INTO B〜;
INSERT INTO C〜;
ROLLBACK;
ROLLBACK
を実行することで、トランザクション開始以降の変更はすべてなかったことになります。
トランザクションのACID特性とは?
トランザクションには、データの整合性を守るための4つの重要な特性があります。これをACID(アシッド)特性と呼びます。
A:Atomicity(原子性)
- 「すべての処理が完了する」か「一切実行されない」かのどちらか
- 一部だけ成功するような中途半端な状態は許されない
COMMIT
またはROLLBACK
によって制御される
C:Consistency(一貫性)
- トランザクションの前後でデータの整合性が保たれている必要がある
- 正常に設計された処理であれば、どれだけ実行しても常に正しい状態を維持する
I:Isolation(独立性)
- 他のトランザクションの影響を受けずに処理されるべき
- 複数のトランザクションが同時に動作しても、互いに干渉してはならない
D:Durability(耐久性)
- トランザクションが
COMMIT
された後、その結果は障害が起きても失われない - データベースは復旧手段(ログやバックアップ)を持っており、永続的に保持される
トランザクションの独立性を保つための仕組み
独立性(Isolation)を確保するためには、トランザクション同士の干渉を防ぐ必要があります。そのために用いられるのがMVCCやロックといった仕組みです。
MVCC(多版同時実行制御)
- トランザクション実行時に**スナップショット(処理前のデータ)**を保持
- 他のトランザクションからは、スナップショットが参照されるため、更新途中の不安定な状態を見せない
COMMIT
されるとスナップショットが破棄され、更新内容が他トランザクションにも反映される
ロック機構
データの更新時には「ロック」を使って他トランザクションのアクセスを制限します。
基本の動作
- ロックがかかったデータには、アクセスが制限される
COMMIT
またはROLLBACK
でロックは解除- ロック解除後、他のトランザクションが処理を実行できるようになる
ロックの種類
ロック種類 | 内容 | キーワード |
---|---|---|
専有ロック | 他のトランザクションは読み取り・書き込み共に不可 | WRITE |
共有ロック | 他のトランザクションは読み取りは可能、更新は不可 | READ |
参考文献
情報処理教科書 データベーススペシャリスト 2025年版
https://amzn.to/3S9utfH
SQL 第2版: ゼロからはじめるデータベース操作
https://amzn.to/4muilDW
コメント