マナビングITパスポート

トランザクションのコミットとは何か、ロールバックとの違いを整理

ITパスポート試験 令和5年度 問66 / データベース › トランザクション処理

過去問にチャレンジ

令和5年度 問66

トランザクション処理におけるコミットの説明として,適切なものはどれか。

  1. ア

    あるトランザクションが共有データを更新しようとしたとき,そのデータに対する他のトランザクションからの更新を禁止すること

  2. イ

    トランザクションが正常に処理されたときに,データベースへの更新を確定させること

  3. ウ

    何らかの理由で,トランザクションが正常に処理されなかったときに,データベースをトランザクション開始前の状態にすること

  4. エ

    複数の表を,互いに関係付ける列をキーとして,一つの表にすること

会話形式の解説

講師講師
今回はトランザクション処理の「コミット」の意味を問う問題です。選択肢には、似た場面で出てくる別の用語の説明が混ざっています。それぞれの説明がどの用語にあたるかを見分けるのがポイントです。
受験者受験者
コミットという言葉は聞いたことがあります。でも、データを確定させることなのか、元に戻すことなのか、少し自信がありません。
講師講師
まずトランザクションから確認します。関連する複数の処理を一つのまとまりとして扱う単位のことです。処理の終わり方は、更新を確定させる「コミット」と、更新を取り消す「ロールバック」の二つしかありません。
受験者受験者
終わり方が二つなら、正常に処理されたときに更新を確定させる、という説明がコミットですね。
講師講師
そのとおりです。それがコミットの定義そのものです。コミットされると、トランザクションの中で行った一連の更新がまとめてデータベースに反映されます。
受験者受験者
では、正常に処理されなかったときにトランザクション開始前の状態に戻す、という説明はロールバックですか。
講師講師
はい、ロールバックです。コミットと対になる操作で、確定ではなく更新の取り消しを行います。トランザクションには原子性という性質があります。すべての処理が実行されるか、まったく実行されないかのどちらかで終わる、という性質です。この二つの操作はそれを支えています。
受験者受験者
他のトランザクションからの更新を禁止する、という説明も、データを守る話なのでコミットと関係がありそうに見えました。
講師講師
そこは間違えやすいところです。これは排他制御、つまりロックの説明です。複数の処理が同時に同じデータを更新して矛盾が起きないようにする仕組みで、更新を確定させるコミットとは別の概念です。
受験者受験者
残りの、関係付ける列をキーにして複数の表を一つにする、という説明は何でしょうか。
講師講師
関係データベースの「結合」です。共通する列の値を使って、複数の表の関連する行を組み合わせる操作です。トランザクションの終わり方とは関係がありません。
受験者受験者
整理すると、確定がコミット、元に戻すのがロールバック、他からの更新の禁止がロック、表を組み合わせるのが結合、という対応ですね。
講師講師
よく整理できています。この分野では、四つの説明を入れ替えて、別の用語を問う形で出題されることもあります。今の対応を覚えておけば、どの用語が問われても判断しやすくなります。

まとめ

コミットとは、正常に終了したトランザクションの更新をデータベースに確定させる操作です。対になるロールバックは、更新を取り消してトランザクション開始前の状態に戻します。他のトランザクションからの更新を禁止するのは排他制御(ロック)で、共通の列をキーにして複数の表を組み合わせるのは結合です。「確定=コミット」「元に戻す=ロールバック」「更新の禁止=ロック」と対応させて覚えると、出題の形が変わっても判断できます。

解答・解説

正解はイです

この問題のテーマ

トランザクション処理で使う「コミット」の意味を正しく理解しているかを問う問題です。似た場面で出てくるロック(排他制御)、ロールバック、表の結合と区別できるかが問われています。

解き方の考え方

最初に、トランザクションが関連する複数の処理を一つにまとめた単位だと確認します。次に、その処理の終わり方が、更新を確定させる「コミット」と、更新を取り消す「ロールバック」の二つだと押さえます。そのうえで、各選択肢が「確定」と「取り消し」のどちらを言っているかを照らします。どちらでもない説明は別の概念なので、除外します。

選択肢ごとの解説

  1. ×ア  あるトランザクションが共有データを更新しようとしたとき,そのデータに対する他のトランザクションからの更新を禁止すること
    この肢は、他のトランザクションからの更新を禁止すると述べています。これは排他制御(ロック)の説明です。ロックは、複数の処理が同じデータを同時に更新して矛盾するのを防ぐ仕組みです。更新を確定させるコミットではないため、不適切です。
  2. ○イ  トランザクションが正常に処理されたときに,データベースへの更新を確定させること
    この肢は、正常に処理されたときにデータベースへの更新を確定させると述べています。これはコミットの定義と一致します。コミットすると、トランザクション内の一連の更新がまとめて反映されます。したがって、適切です。
  3. ×ウ  何らかの理由で,トランザクションが正常に処理されなかったときに,データベースをトランザクション開始前の状態にすること
    この肢は、正常に処理されなかったときに開始前の状態へ戻すと述べています。これはロールバックの説明です。ロールバックはコミットと対になる操作で、確定ではなく更新の取り消しを行います。したがって、コミットの説明ではなく、不適切です。
  4. ×エ  複数の表を,互いに関係付ける列をキーとして,一つの表にすること
    この肢は、関係付ける列をキーにして複数の表を一つにすると述べています。これは関係データベースの「結合」の説明です。結合は、共通する列の値で複数の表の関連する行を組み合わせる操作で、トランザクションの終わり方とは関係がありません。したがって、不適切です。

補足

コミット・ロールバック・ロック・結合は、次の対応で覚えておくと区別できます。「確定」ならコミット、「元に戻す」ならロールバック、「他からの更新を禁止」ならロック、「複数の表を一つにする」なら結合です。

POINT

  • コミットは、正常に終了したトランザクションの更新をデータベースに確定させる操作です。
  • ロールバックはコミットと対になる操作で、更新を取り消してトランザクション開始前の状態に戻します。
  • トランザクションは原子性により、すべての処理が実行されるか、まったく実行されないかのどちらかで終わります。
  • 他のトランザクションからの更新を禁止するのは排他制御(ロック)で、同時更新による矛盾を防ぐ仕組みです。
  • 共通の列をキーにして複数の表を組み合わせる操作は、表の結合です。

※出典:令和5年度 ITパスポート試験 問66