mysql:924
From: "Satoshi Koiwa" <"Satoshi Koiwa" <koiwa@xxxxxxxxxx>>
Date: Thu, 27 May 1999 14:01:56 +0900
Subject: [mysql 00924] RE: トランザクション処理
ども、ユーザ先でこっそりビジネスホンにモデムをつないでいる小岩です。今のとこ ろ縛り首にはなっていません。 >ということは、この仕組みがなければ、同時に何人かでデータベースを >操作することができない、ということになるのでしょうか。 たいてい大丈夫です。在庫を参照する販売処理を想定してみます。 残在庫5個の商品をAさんが画面で在庫確認した上で4個をX社に売る販売データを入 れます。数秒遅れてBさんが残在庫5個であることを確認して3個をZ社に売る販売デー タを入れます。画面上OKなはずなのにBさんにはエラーメッセージが返ります。 販売すると在庫マスタの更新もするし販売履歴マスタにも登録するし顧客マスタに も更新をする仕組みだったとします。Bさんが「登録」ボタンを押したときに販売履 歴マスタへのデータ追加と顧客マスタの更新が先に走ってしまったら、在庫引き当て でエラーになるまえにそっちが確定してしまいます。Cさんも数秒遅れでZ社のデータ を入れていたら復旧させるのが大変です。同様のことは、在庫マスタは問題なくて顧 客マスタに何らかの問題があったときにも当然生じます。実際にはモノが動いていな いのにコンピュータ上の在庫が減るという、そういうやつです。 >今までは、Windowsで、FileMakerをいじってきましたので(業務で >使用しています)、あまり詳しいことがわかりません。お分かりの >かたがいましたら、教えてください。FileMakerは、同時に多人数 >でデータベースをいじっても問題を生じないようになっています。 >確か、レコードロック機能というのだと思いましたが・・・ 私は基本的にMacユーザなので、昔からファイルメーカーを使っています。で、MySQL にはテーブルをロックする機能がありますんで、その点ではファイルメーカーとほぼ 同等です。 MySQLではプログラムを工夫すればコミット、ロールバック、排他制御が擬似的に可 能だと思います。たいていの事務処理システムでは本当にトランザクション処理が必 要な部分というのはごく限られた部分だけだと思います。たとえば顧客マスタの追加 ・更新処理なんて、確かに排他制御しなければAさんが郵便番号を更新する間にBさん が電話番号を更新しようとしてどっちかの作業が無効になってしまうということもあ りますが、高価で高機能なOracleが使われているシステムだってこんな部分では排他 制御なんてしてないことがほとんどだと思います(私の周辺だけか?)。 気にしない、困ったら対策する、本当にまずそうなところだけは最初から工夫をし ておく、これでOKなんじゃないかなぁ。