SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

DB Magazine 転載記事

まったくの初心者もこれでバッチリ
12のキーワードから学ぶデータベース基本中のキホン(後編)

『DB Magazine 2007年05月号』 転載記事

keyword 10 トランザクション

 トランザクションというキーワードは、データベースのデータの値を更新する上で、大変重要なキーワードとなります注。ここで説明するトランザクションとは、関連する複数のデータの修正などの処理を、1つの処理単位としてまとめたものです。データの修正をDML文によって行なった場合、それは仮修正となり、処理単位で最後にすべて適用するのか(COMMIT)、取り消すのか(ROLLBACK)を決定させる仕組みを持ちます。

 では、なぜこのような仕組みが必要なのでしょうか。銀行振り込みの例を考えてみます。A銀行のXさんの口座にある5000円を、B銀行のYさんの口座に振り込むとします。関連するデータがすべてデータベース化されていた場合、単純には次のような処理を行なうことになります(図21)。

図21:トランザクションの例(1)
図21:トランザクションの例(1)
  1. Xさんの口座の金額を5000円減らすUPDATE文を実行する
  2. Yさんの口座の金額を5000円増やすUPDATE文を実行する
  3. 振り込みの履歴を記録するデータをINSERT文によって生成する

 トランザクションという言葉は、日々発生するデータを記録したものを指す場合もありますので注意してください。

 もし何らかのトラブルにより、(1)と(3)が成功し、(2)がうまくいかなかったとします。そうすると、Xさんの口座は金額が引かれただけの状態となってしまい、ビジネス的におかしなことになります。Xさんからクレームが来ることでしょう。また、それではそのときに、(1)を相殺するUPDATE文、(3)を相殺するDELETE文を実行して、元の状態に戻す方法が考えられます。さらに、(2)だけを再実行することも考えられます。しかし、それらの処理でエラーが発生した場合はどうするのか、また、どこで発生したのかを発見させるようなロジックを検討する必要があり、なかなか大変です。

 そこで、トランザクションとして(1)(2)(3)の処理を1つで管理し、すべて成功したらトランザクション成功(COMMIT)とし、トランザクションを構成する処理が1つでもうまくいかなかったら、すべて取り消すこと(ROLLBACK)にすると、処理が簡単になります。トランザクションが失敗した場合は元の状態に戻っているので、トランザクションを再実行させることによってカバーできるわけです(図22)。

図22:トランザクションの例(2)
図22:トランザクションの例(2)

 なお、トランザクションには満たすべき性質を示す、次のようなACID特性というものがあります。

原子性(Atomicity)

 トランザクションとして管理された処理が「すべて成功」か「すべて失敗」であることを保証する特性。先ほどの銀行振り込み例が該当します。

一貫性(Consistency)

 トランザクションを実行した結果、データベースの内容に矛盾が発生しないようにする特性。例えば図書館で1冊しかない本を貸し出した際、ある瞬間では1人のみにしか貸し出しできません。

独立性(Isolation)

 複数のトランザクションが同時に実行されているとき、お互いのトランザクションの影響を受けない状態にあることを保証する特性。1つのトランザクションがほかのトランザクションの処理中の内容に影響を与えないようにする必要があります。

耐久性(Durability)

 いったんトランザクションが終了したら、障害が発生してもデータの状態が変わらないことを保証する特性。つまり障害が発生してもそのデータが失われないこと示します。

次のページ
keyword 11 論理構造と物理構造

この記事は参考になりましたか?

DB Magazine 転載記事連載記事一覧
この記事の著者

市川 道雄(イチカワ ミチオ)

 株式会社日立システムアンドサービス、人財教育部に勤務。サポート/ソリューションサービス部門と連携した教育企画/実施を担当後、現在はOracleを含むデータベース関連教育を選任で担当している。Oracle認定講師。データベーススペシャリスト、ORACLE MASTER Gold Oracle Databas...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3293 2009/02/06 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー