トランザクションとは何ですか

いくつかの書き込みを「全部やるか、全部やらないか」の 1 まとまりにする仕組み。送金の例と、ACID を自分の言葉で答えます。

こう聞かれます

  • 「トランザクションとは何ですか」
  • 「A さんから B さんへ送金する処理で、途中で失敗したらどうなりますか」
  • 「ACID とは何ですか。1 つずつ説明してください」

面接官が見ている点

  • 送金のような具体的な例で、なぜ要るのかを話せるか
  • コミットとロールバックの働きを言えるか
  • ACID の 4 つを、暗記ではなく自分の言葉で言えるか

短い答え

  • トランザクションは、いくつかの書き込みを「全部やるか、全部やらないか」の 1 まとまりとして扱う仕組みです。
  • 送金なら、A さんの残高を減らすことと B さんの残高を増やすことを 1 まとまりにし、片方だけ起きた状態を残しません。
  • 全部うまくいったらコミットで確定し、途中で失敗したらロールバックで始める前の状態に戻します。

少し詳しい答え

送金の例

BEGIN で始め、2 つの更新がそろったら COMMIT で確定します。

SQL クエリ

CREATE TABLE accounts (
  id INTEGER PRIMARY KEY,
  name VARCHAR(20),
  balance INTEGER
);
INSERT INTO accounts VALUES
  (1, 'Aya', 10000),
  (2, 'Ken', 0);
BEGIN;
UPDATE accounts
SET balance = balance - 3000
WHERE id = 1;
UPDATE accounts
SET balance = balance + 3000
WHERE id = 2;
COMMIT;
SELECT name, balance
FROM accounts
ORDER BY id;
Aya|7000
Ken|3000

次は、減らしたところで失敗した場合です。ROLLBACK で、BEGIN より前の状態に戻ります。

SQL クエリ

BEGIN;
UPDATE accounts
SET balance = balance - 3000
WHERE id = 1;
ROLLBACK;
SELECT name, balance
FROM accounts
ORDER BY id;
Aya|7000
Ken|3000

Aya さんの残高は 4000 にならず、7000 のままです。お金が消えた状態は残りません。

ACID を自分の言葉で

  • 原子性 (Atomicity) 全部やるか、全部やらないか。途中までの状態を残しません
  • 一貫性 (Consistency) 表に決めた約束 (残高はマイナスにしない、のような制約) を、終わったあとも守ります
  • 独立性 (Isolation) 同時に動くほかのトランザクションと、互いに邪魔をしないようにします。途中の状態がどこまで見えるかは、設定 (分離レベル) で選びます
  • 永続性 (Durability) コミットが済んだ結果は、そのあと電源が落ちても消えません

作った物と結べると伝わりやすくなります。たとえば「注文を作るときに在庫も減らすので、2 つの書き込みを 1 つのトランザクションにして、片方だけ残らないようにした」のように話します。

よくある間違い

  • 「トランザクションを使えば、同時の書き込みも全部安全」と言う 2 人が同時に同じ残高を読んで書き戻すと、片方の更新が消えることがあります。分離レベルや行の鍵 (ロック) で別に手当てします
  • ACID を英語の言葉の暗記で答える 1 つずつ「何が起きないようにするか」を、送金の例に当てて話すと伝わります
  • 外部のサービスへの送信も、ロールバックで取り消せると思う 戻せるのは DB の中の書き込みだけです。送ったメールや外の決済は、別の手当てが要ります

深掘りの問い

  • 「残高が足りないのに送金されるのを、どう防ぎますか」減らす更新に balance >= 3000 のような条件を付け、更新できた行が 0 ならロールバックする、または残高を読むときに行を鍵で押さえる、と答えます
  • 「分離レベルとは何ですか」同時に動くトランザクションの途中の結果を、どこまで見えなくするかの段階です。強くすると安全ですが、待ちや失敗が増える、と答えます
  • 「トランザクションを長く開いたままにすると、何が困りますか」押さえた行を、ほかの処理が待ち続けます。外の API の返事を待つ処理はトランザクションの外に出す、と答えます

確認日 2026年10月23日

技術面接問題の一覧へ戻る