コンテンツへスキップ
ホーム » 記事一覧 » UPDATEしたデータを確定するには?COMMIT前の確認手順

UPDATEしたデータを確定するには?COMMIT前の確認手順

UPDATEを実行して値が変わっても、まだ確定していない場合があります。一方、自動で確定する設定なら、その時点で変更が確定しています。この記事では、練習用のPostgreSQLで、更新する前からCOMMIT後までを順番に確認します。

💡 このページでわかること

  • COMMITが必要な場合と、自動で確定する場合の違い
  • 更新する行・件数・値を確認する手順
  • 確定と取り消しの選び方

COMMITとは?更新を確定する操作

COMMIT(コミット)は、データの変更を確定して、ひとまとまりの処理を終える命令です。このひとまとまりを「トランザクション」と呼びます。UPDATEは値を書き換える命令、COMMITは変更を確定する命令、と役割を分けて考えましょう。

ただし、UPDATEのあとに必ず手動のCOMMITが必要なわけではありません。「自動コミット」が有効で、トランザクションを明示的に開始していなければ、成功したSQLが自動的に確定する場合があります。本記事ではBEGINで開始し、確認する時間を設けます。

更新から確定までの流れ

接続先と対象を確認 → BEGINで開始 → UPDATE → 件数と変更後の値を確認 → 正しければCOMMIT、違えばROLLBACK、という流れです。ROLLBACK(ロールバック)は未確定の変更を取り消す命令です。COMMITとROLLBACKは、順番に両方実行するものではありません。

接続先と対象を確認し、BEGIN・UPDATEの後に件数と値を確認。正しければCOMMIT、違えばROLLBACKを選ぶ

練習用データを用意する

ここからはPostgreSQL 17のpsql(SQLを入力するためのツール)を使う例です。練習用DBに接続し、ほかの作業をしていない新しい接続で試してください。本番DBのテーブル名へ置き換えて実行するための手順ではありません。業務ではチームの作業手順と確認ルールに従います。

自動コミットが標準設定のONであることをpsqlの\echo :AUTOCOMMITで確認します。ONでない場合はここで設定を変えず、別の練習用接続を用意してください。

CREATE TEMP TABLE commit_practice_items (
  id integer PRIMARY KEY,
  item_name text,
  price integer
);
INSERT INTO commit_practice_items
VALUES (1, 'ノート', 300), (2, 'ペン', 120);

これは今の接続だけで使う一時テーブルです。接続を閉じると消えるため、ここでの確定は永続テーブルへの保存とは区別してください。準備がエラーになったら続行せず、原因を確認します。

STEP1〜4:対象を確認して更新・確定する

STEP1:接続先と変更対象を確認する

SELECT current_database(), current_user;
SELECT id, item_name, price
FROM commit_practice_items
WHERE id = 1;

接続中のDB名とユーザー名を確認します。対象は「idが1のノート、価格300、1件」です。SELECTはデータを読む命令、WHEREは対象を絞る条件です。実務では接続先サーバー・本番か検証かもツールの接続情報で確認します。同じ名前のDBが別サーバーにあることもあるためです。

STEP2:開始してからUPDATEする

BEGIN;
UPDATE commit_practice_items
SET price = 350
WHERE id = 1;

BEGINは処理の開始、SETは変更する列と値の指定です。psqlでは正常終了時に「UPDATE 1」と表示される想定です。これは1行が更新対象になったという意味で、確定の完了を表す表示ではありません。

STEP3:件数と変更後の値を確認する

SELECT id, item_name, price
FROM commit_practice_items
ORDER BY id;

同じ接続で実行します。期待する結果は、id 1のノートが350、id 2のペンが120です。件数だけでなく、変更する行・変更しない行の値も確かめましょう。UPDATE 0なら対象条件を見直します。エラーや想定外の結果があれば、確定へ進まず取り消します。

ノートの価格だけ300から350へ変更し、ペン120は変わらない

STEP4:正しければ確定、違えば取り消す

結果が正しい場合だけ、次を実行します。psqlの終了メッセージがCOMMITであることを確認してください。

COMMIT;

違う場合は、COMMITの代わりに次を実行します。両方を順番に実行するものではありません。取り消す範囲は、このトランザクションに含まれる未確定の変更全体です。

ROLLBACK;

その後、次のSELECTで全2件を確認します。確定した場合はノート350・ペン120、取り消した場合はノート300・ペン120です。COMMITを入力しただけで成功と判断せず、エラーがないことと結果を確認します。

SELECT id, item_name, price
FROM commit_practice_items
ORDER BY id;

初心者が注意するポイント

画面で変更後の値が見えるだけでは、COMMIT済みとは判断できません。同じ接続では、自分が変更した未確定の値も読めるためです。

COMMIT後の変更は、あとからROLLBACKしても元には戻りません。自動コミットで確定した変更も同様です。また、今回のような確認のためにトランザクションを開いたまま長時間離席しないでください。実務の共有テーブルでは、ほかの人の更新を待たせることがあります。

よくある疑問

Q. UPDATEが成功したのに画面が変わりません。

未確定以外にも、別のDBを見ている、画面に古い表示が残っているなどの理由があります。すでに実行した更新に対し、確認せずCOMMITを追加するのは避け、接続先・結果・確定状態を確認しましょう。

Q. 別のSQLタブからCOMMITしてもよいですか?

同じDBでも別接続なら、元の接続の変更は確定できません。今回の練習は同じ接続で最後まで行います。タブと接続の対応はツールごとに異なります。

Q. MySQLやOracleでも、そのまま試せますか?

そのままでは使えません。開始方法、一時テーブル、自動コミットの設定などが異なります。この記事のSQLはPostgreSQL向けです。

まとめ・関連記事

COMMIT前は「対象は正しいか」「件数は想定どおりか」「値は合っているか」を確認します。正しければ確定し、違えば未確定のうちに取り消します。まずは練習用の小さなデータで流れをつかみましょう。

参考:PostgreSQLのトランザクション、UPDATE、COMMIT、psqlの公式ドキュメント。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です