カテゴリ: データベース 更新日: 2026/01/15

SQLのCOMMITとROLLBACKとは?トランザクション操作を初心者向けに完全解説

COMMITとROLLBACKの違いとは?SQLトランザクションの基本操作を解説
COMMITとROLLBACKの違いとは?SQLトランザクションの基本操作を解説

先生と生徒の会話形式で理解しよう

生徒

「データベースのトランザクションって何ですか?COMMITとかROLLBACKとか聞いたことがあるんですけど...」

先生

「トランザクションは、データベースの操作をひとまとめにして実行する仕組みです。COMMITは変更を確定させる命令で、ROLLBACKは変更を取り消す命令ですよ。」

生徒

「なんだか難しそうですね...初心者でも理解できますか?」

先生

「大丈夫です。鉛筆で書いた文字を消しゴムで消すイメージで考えると分かりやすいですよ。順番に説明していきましょう。」

1. トランザクションとは?データベース操作の基本概念

1. トランザクションとは?データベース操作の基本概念
1. トランザクションとは?データベース操作の基本概念

トランザクションとは、データベースに対する一連の操作をひとまとまりとして扱う仕組みのことです。例えば、銀行の振込を考えてみましょう。Aさんの口座から1万円を引き出して、Bさんの口座に1万円を入金する、という2つの操作は必ずセットで成功しなければなりません。

もし途中でエラーが起きて、Aさんの口座からお金が引かれたのにBさんの口座に入金されなかったら大変ですよね。トランザクションは、このような複数の操作を「全部成功するか、全部失敗するか」のどちらかにする仕組みです。

ポイント: トランザクションは「全部成功」か「全部失敗」のどちらかになります。中途半端な状態は作りません。

2. COMMITとは?変更を確定させる命令

2. COMMITとは?変更を確定させる命令
2. COMMITとは?変更を確定させる命令

COMMITは、データベースへの変更を正式に確定させる命令です。鉛筆で書いた下書きをペンでなぞって清書するようなイメージです。一度COMMITすると、その変更は永続的にデータベースに保存され、他のユーザーからも見えるようになります。

COMMITの基本的な使い方

まず、トランザクションを開始してデータを更新し、その後COMMITで確定させる流れを見てみましょう。以下は会員テーブルのデータを更新する例です。

実行前のテーブルの状態:

id | name       | age | email
---+------------+-----+-------------------
1  | 山田太郎   | 25  | taro@example.com
2  | 佐藤花子   | 19  | hanako@example.com
3  | 鈴木一郎   | 30  | ichiro@example.com
4  | 田中美咲   | 22  | misaki@example.com

BEGIN;
UPDATE members
SET age = 26
WHERE name = '山田太郎';
COMMIT;
実行後のテーブルの状態:

id | name       | age | email
---+------------+-----+-------------------
1  | 山田太郎   | 26  | taro@example.com
2  | 佐藤花子   | 19  | hanako@example.com
3  | 鈴木一郎   | 30  | ichiro@example.com
4  | 田中美咲   | 22  | misaki@example.com

このように、BEGINでトランザクションを開始し、UPDATE文でデータを変更し、最後にCOMMITで変更を確定させます。COMMITを実行すると、山田太郎さんの年齢が25歳から26歳に正式に変更されます。

3. ROLLBACKとは?変更を取り消す命令

3. ROLLBACKとは?変更を取り消す命令
3. ROLLBACKとは?変更を取り消す命令

ROLLBACKは、トランザクション内で行った変更を取り消す命令です。消しゴムで文字を消すように、データベースへの変更をなかったことにできます。間違った操作をしてしまったときや、エラーが発生したときに使います。

ROLLBACKの基本的な使い方

同じ会員テーブルを使って、ROLLBACKの動作を確認してみましょう。今度は変更を取り消す例です。

実行前のテーブルの状態:

id | name       | age | email
---+------------+-----+-------------------
1  | 山田太郎   | 25  | taro@example.com
2  | 佐藤花子   | 19  | hanako@example.com
3  | 鈴木一郎   | 30  | ichiro@example.com
4  | 田中美咲   | 22  | misaki@example.com

BEGIN;
DELETE FROM members
WHERE age < 20;
ROLLBACK;
実行後のテーブルの状態:

id | name       | age | email
---+------------+-----+-------------------
1  | 山田太郎   | 25  | taro@example.com
2  | 佐藤花子   | 19  | hanako@example.com
3  | 鈴木一郎   | 30  | ichiro@example.com
4  | 田中美咲   | 22  | misaki@example.com

DELETE文で20歳未満のデータを削除しようとしましたが、ROLLBACKを実行したため、削除は取り消されました。テーブルは元の状態のままです。このように、ROLLBACKを使えば、間違った操作をしてもデータを守ることができます。

4. COMMITとROLLBACKの違いを比較

4. COMMITとROLLBACKの違いを比較
4. COMMITとROLLBACKの違いを比較

COMMITとROLLBACKの違いを表で整理してみましょう。

項目 COMMIT ROLLBACK
役割 変更を確定させる 変更を取り消す
使うタイミング 操作が正常に完了したとき エラーが発生したときや操作を取り消したいとき
データへの影響 永続的に保存される トランザクション開始前の状態に戻る
他のユーザーからの見え方 変更が見えるようになる 変更は見えない(元の状態のまま)

5. 実践的な例:銀行の振込処理でトランザクションを使う

5. 実践的な例:銀行の振込処理でトランザクションを使う
5. 実践的な例:銀行の振込処理でトランザクションを使う

銀行の振込処理を例に、トランザクションの重要性を理解しましょう。AさんからBさんへ5000円を振り込む処理を考えます。

実行前の口座テーブルの状態:

id | name       | balance
---+------------+---------
1  | Aさん      | 10000
2  | Bさん      | 5000
3  | Cさん      | 20000
4  | Dさん      | 15000

BEGIN;
UPDATE accounts
SET balance = balance - 5000
WHERE name = 'Aさん';

UPDATE accounts
SET balance = balance + 5000
WHERE name = 'Bさん';
COMMIT;
実行後の口座テーブルの状態:

id | name       | balance
---+------------+---------
1  | Aさん      | 5000
2  | Bさん      | 10000
3  | Cさん      | 20000
4  | Dさん      | 15000

この例では、Aさんの残高から5000円を引き、Bさんの残高に5000円を足しています。もし途中でエラーが起きた場合は、自動的にROLLBACKが実行され、両方の操作が取り消されます。これにより、お金が消えたり増えたりする問題を防げます。

6. トランザクションを使うときの注意点

6. トランザクションを使うときの注意点
6. トランザクションを使うときの注意点
重要な注意事項
トランザクションは必ず終了させる

BEGINでトランザクションを開始したら、必ずCOMMITかROLLBACKで終了させましょう。終了しないと、他のユーザーがデータにアクセスできなくなることがあります。

データの整合性を保つ

トランザクションは、データの整合性を保つための重要な仕組みです。複数の操作を行うときは、必ずトランザクションで囲むようにしましょう。特に、お金や在庫など、数値が変わる処理では必須です。

長時間のトランザクションは避ける

トランザクションが長時間続くと、データベース全体のパフォーマンスが低下します。必要な操作だけをトランザクションに含め、素早く完了させることが大切です。

7. 自動コミットとは?デフォルトの動作を知ろう

7. 自動コミットとは?デフォルトの動作を知ろう
7. 自動コミットとは?デフォルトの動作を知ろう

多くのデータベースシステムでは、自動コミット機能がオンになっています。これは、SQL文を実行するたびに自動的にCOMMITされる機能です。つまり、明示的にBEGINを書かない限り、一つ一つのSQL文が独立したトランザクションとして扱われます。

複数の操作をまとめて実行したい場合は、必ずBEGINでトランザクションを明示的に開始する必要があります。自動コミットの設定は、データベースの設定やツールによって変更できます。

ヒント: 本番環境では、重要な処理は必ずトランザクションで囲み、テストしてからCOMMITしましょう。
カテゴリの一覧へ
新着記事
New1
データベース
SQLの処理が遅くなる原因とは?初心者向けにデータベースパフォーマンス最適化を完全解説
New2
Ruby
RubyのネストHash操作を徹底解説!digとtransformメソッドで複雑なデータも楽々
New3
Rails
Railsインデックス設計の極意!爆速サイトを作るためのスキーマ設計ガイド
New4
データベース
SQLのCOMMITとROLLBACKとは?トランザクション操作を初心者向けに完全解説
人気記事
No.1
Java&Spring記事人気No1
Ruby
PATHと環境変数の正しい設定!Windows・Mac・Linux別チェックリスト付き
No.2
Java&Spring記事人気No2
Rails
Railsで日本語と時刻の設定をしよう!初心者でも安心のlocale/zone初期設定チートシート
No.3
Java&Spring記事人気No3
Ruby
Rubyのハッシュを徹底比較!シンボルキーと文字列キーの違いと使い分け
No.4
Java&Spring記事人気No4
Rails
Railsマイグレーションの型選びを完全ガイド!初心者が迷わないカラム設計
No.5
Java&Spring記事人気No5
Ruby
WindowsでRubyをインストールする方法!RubyInstallerとMSYS2を使った完全ガイド
No.6
Java&Spring記事人気No6
Rails
RailsモデルとActive Record基礎|ID戦略を完全理解!AUTO INCREMENT・UUID・ULIDの比較と導入手順
No.7
Java&Spring記事人気No7
Ruby
Rubyのハッシュ走査を完全マスター!each・each_key・each_valueの使い方
No.8
Java&Spring記事人気No8
データベース
ACID特性とは?データベーストランザクションの信頼性を初心者向けに徹底解説