PostgreSQLの自動コミットを完全理解!初心者でもわかるトランザクションの基本仕組み
生徒
「PostgreSQLでSQLを実行したら、勝手にデータが保存されました。COMMITしてないのに大丈夫なんですか?」
先生
「それは自動コミットという仕組みが動いているからです。PostgreSQLでは、特に指定しない限り自動で保存されるようになっています。」
生徒
「パソコン初心者でも、その仕組みを理解できますか?」
先生
「もちろんです。レジでの買い物を例にして、ゆっくり説明します。」
1. SQLとは何か?
SQLは、データベースという「情報をきれいに整理して保管する箱」に対して命令を出すための言葉です。 データベースは、紙の名簿やノートを大量にまとめたような存在です。 SQLを使うことで、情報を探したり、書き足したり、書き直したりできます。
PostgreSQLは、そのSQLを使って操作できるデータベースの一種で、正確さと安全性に強い特徴があります。
2. 自動コミットとは何か?
自動コミットとは、「SQLを1つ実行するたびに、自動で保存が行われる仕組み」です。 COMMITという命令を書かなくても、PostgreSQLが裏側で自動的にCOMMITを実行してくれます。
例えるなら、コンビニで商品をレジに持っていき、支払いをした瞬間に購入が確定するようなものです。 「やっぱりやめます」と言わない限り、自動的に処理が完了します。
3. サンプルで使うテーブルの状態
ここでは、ユーザー情報を管理するテーブルを使って説明します。 表は、縦と横に区切られた名簿のようなものです。
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋次郎 | 22 | jiro@example.com
4. 自動コミットが有効な状態でのSQL実行
PostgreSQLでは、特別な設定をしない限り自動コミットが有効です。 そのため、UPDATEやINSERTを実行すると、その場ですぐに保存されます。
UPDATE users
SET age = 26
WHERE id = 1;
このSQLを実行した直後、すでに変更は確定しています。 COMMITを書いていなくても、年齢は保存されています。
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 26 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋次郎 | 22 | jiro@example.com
5. 自動コミットと手動トランザクションの違い
自動コミットはとても便利ですが、複数の操作をまとめて行いたいときには注意が必要です。 1つずつ自動で保存されるため、途中で失敗しても元に戻せません。
そこで使うのがBEGINです。 BEGINを書くと、自動コミットが一時的に止まり、手動でCOMMITやROLLBACKを選べる状態になります。
BEGIN;
UPDATE users
SET age = age + 1
WHERE age >= 20;
6. 自動コミット状態ではROLLBACKできない理由
自動コミットが有効な状態では、SQLを実行した瞬間に確定してしまいます。 そのため、「取り消す」という選択肢がありません。
これは、ノートにペンで書いた文字のようなものです。 すぐに確定してしまうため、消しゴムを使う前に内容が決まってしまいます。 まとめて操作を取り消したい場合は、必ずBEGINを使う必要があります。
7. 自動コミットが向いている場面
自動コミットは、単純な操作を1回だけ行うときに向いています。 たとえば、1人分のデータを修正する場合や、確認用のデータ追加などです。
PostgreSQLでは、初期状態で自動コミットが有効になっているため、 初心者でも意識せずに安全に操作を始められるようになっています。 これが、多くの人に使われている理由の一つです。