トランザクションとは?複数の処理をひとまとまりとして扱う理由をやさしく解説

トランザクションとは?複数の処理をひとまとまりとして扱う理由をやさしく解説のサムネイル

トランザクションとは、複数の処理を1つのまとまりとして扱う考え方です。たとえば銀行振込では、「お金を引く」「相手に足す」という2つの処理がセットです。片方だけ成功すると困るので、全部成功したときだけ確定し、失敗したら元に戻します。この記事では、その理由と使い方を、仕事で役立つ目線でやさしく整理します。

目次

トランザクションとは、まず何を指すのか

データベースでは、1回の処理でいくつもの表や行が変わることがあります。そこで「この処理の集まりは、途中で切らずに1セットとして扱おう」と決める仕組みがトランザクションです。

大事なのは、全部成功するか、全部なかったことにするかのどちらかにそろえることです。これにより、データが半端な状態で残るのを防げます。

このときによく出る言葉が commitrollback です。commit は「ここまでの変更を確定する」、rollback は「失敗したので元に戻す」という意味です。

つまりトランザクションは、データベースの処理に「やり直しできる安全網」をつける仕組みだと考えるとわかりやすいです。

よくある疑問:SQLを1文ずつ実行すれば、わざわざトランザクションを使わなくてもよさそうですが、違うんですか?

1文ずつでも動きますが、途中で失敗したときに前後のつじつまが合わなくなります。だから、関連する処理はまとめて扱う方が安全です。

考え方 やさしい意味
Atomicity 全部やるか、全部やらないか
Consistency データのルールをこわさない
Isolation 他の処理と混ざりにくくする
Durability 確定した結果を残す

この4つはACIDと呼ばれます。名前は難しく見えますが、言っていることは「途中で壊れないようにする」「確定したら消えにくくする」という安全の約束です。

身近なたとえで考える

トランザクションは、駅の改札を通るイメージに近いです。切符を入れて、条件がそろえば通れる。途中でエラーがあれば、その場で止まる。処理がバラバラに進むのではなく、通るか止まるかを1回で決めています。

別のたとえなら、夕飯の買い物です。肉だけ買えて野菜が買えなかったら、料理の予定が崩れます。必要なものをまとめてそろえるから、夕飯として意味があるのです。データベースでも同じで、必要な更新を1セットにまとめるから、情報の意味が崩れません。

この考え方がないと、たとえば「在庫は減ったのに注文履歴がない」「残高は引かれたのに相手に届いていない」といった困りごとが起きます。人の作業ならあとで見つけて直せることもありますが、システムでは一瞬のズレがそのまま記録に残るため、最初からひとまとまりにしておくことが大切です。

実務ではどう使うのか

ネット通販を例にすると、注文1件で次のような処理が動きます。

  • 注文データを入れる
  • 在庫を1つ減らす
  • 支払い情報を記録する
  • 発送待ちの状態にする

このうち1つでも失敗したら、途中までの変更は取り消したいはずです。もし支払い記録だけ失敗したのに在庫だけ減ってしまうと、画面上は売れたことになっていても、実際の注文処理は完成していない状態になります。

そこで、最初に「トランザクション開始」をして、全部の処理を進めます。最後まで問題がなければ commit で確定します。途中でエラーが出たら rollback で戻します。こうして、利用者にも運用側にも、筋の通ったデータを残せます。

また、同時にたくさんの人が使うサービスでは、同じ在庫を2人が同時に取ってしまうことがあります。こうした競合を防ぐためにも、トランザクションの考え方が役立ちます。特に注文、決済、在庫のように、関係するデータが複数の表にまたがる場面で重要です。

設計を考えるときは、どの表がどうつながるかを先に見ておくと整理しやすくなります。たとえば ER図 で関係を見ておくと、「どの更新を同時にまとめるか」が考えやすくなります。

トランザクションは、処理を速くするためだけのものではありません。データを壊さず、あとで困らないようにするための仕組みです。

図解で整理

トランザクションの流れ
全部成功したらcommit、失敗したらrollbackで元に戻す。

ここでは、トランザクションの流れを「成功した場合」と「失敗した場合」に分けて見ます。

成功したとき

  • 開始する
  • 更新1を行う
  • 更新2を行う
  • 更新3を行う
  • commit で確定する

失敗したとき

  • 開始する
  • 更新1を行う
  • 更新2でエラーが出る
  • rollback で元に戻す

この流れを見ると、トランザクションの役目はとてもシンプルです。全部そろったら確定、どこかで失敗したら取り消し。この1本のルールがあるから、複数の処理を安心して扱えます。

なお、現場では「どこまでを1つのトランザクションにするか」も大切です。広げすぎると他の処理とぶつかりやすくなり、狭すぎるとデータのつじつまが合わなくなります。だから、実際には「何を同時に守る必要があるか」を見て、ちょうどよい範囲を決めます。

3問クイズ

第1問

トランザクションを使う一番の理由は何ですか?

答えを見る

答え:複数の処理の途中で失敗しても、片方だけ変わったままにせず、元の状態へ戻せるようにするためです。

第2問

commitrollback の役割はそれぞれ何ですか?

答えを見る

答え:commit は変更を確定すること、rollback は失敗した変更を取り消して元に戻すことです。

第3問

ネット通販で注文、在庫、支払いをまとめて扱うとき、トランザクションが役立つのはなぜですか?

答えを見る

答え:3つの処理を同時にそろえて、1つでも失敗したら全部を取り消せるので、データの食い違いを防げるからです。

まとめ

トランザクションとは、複数の処理を1つのまとまりとして扱う仕組みです。ポイントは、全部成功したら確定し、失敗したら元に戻すことです。これにより、データが半端な状態で残るのを防げます。

まずは「なぜまとめるのか」を覚えれば十分です。細かな用語はあとからでも大丈夫です。実務では、注文・決済・在庫のように、関係するデータをまとめて守る場面で何度も出てきます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次