処理の流れとしてはこうです。
1.販売テーブルをごっそり取得
~~販売テーブルの1レコードずつループ開始~~
2.色々処理
3.販売テーブルの主キーと削除フラグを指定して、再び1レコード取得
4.3.で取得出来たら、その1レコードの中にあるチェックフラグをオンに更新
5.2.へ戻る(次のレコードの処理へ)
~~販売テーブルの1レコードずつループ終了~~
上記の処理の3.をやってる意味が分からないです、販売テーブルを1.でごっそり取得したわけですが、
そのごっそり取ったリストにもプライマリキーのカラムの値が格納され、3.でそのプライマリキーをキーに取得しているのですから、3.で取得できるのは当たり前だと思うのです。
更新する前に3.で取得している理由はなんでしょうか?
1.と3.の間で削除フラグがオンになった場合は、3で取得できなくなり更新処理へは行かなくなるのですが、削除フラグは基本的に立ちませんし、更新のSQLにも削除フラグがあるため3の処理がなくても更新はされません。更新結果0件になるだけです。
どんな理由が考えられますか?
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
データベースは複数の人が同時に利用します。
Aさんが、データを読み込んで何か処理した後、いざ書き込もうとしたとき、そのデータが、Aさんが読み込んだ後、Bさんによってすでに変更されていることがあります。
この場合、そのまま書き込んでしまうと、Bさんの変更したデータを上書きしてしまいます。
こういう競合問題を防ごうとしているのかもしれません。
一般的にDBで更新処理を行う場合、排他制御を行いますが、楽観ロックは、オプティミスティック ロックといい。レコードは、変更がデータベースにコミットされるときにのみロックされます。
もうひとつは、ペシミスティック ロックで。レコードは、編集されている間、ロックされます。
マイクロソフトのVisualStudioで、EntityFrameworkとか、その前の世代のフレームワークを使ってDBを処理すると、自動的に楽観ロックの処理が組み込まれるので、その存在が分からないこともあります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
tryの終了
-
Tomcat高負荷時の設定について
-
ファイルの排他
-
JavaScriptからJAVAクラスを呼...
-
二次元配列について
-
[Java] while(true)の意味
-
Javaでのデバッグコード削除
-
数値の定数を付ける時
-
JavaでVBのDOEVENTSと同様の処...
-
MVC C# 共通メソッドはどこに書...
-
JDBCでテーブルUPDATE後の再検...
-
FocusLostでイベント処理を中断...
-
重い処理中のアニメーションgif...
-
重い処理を行っているとGIFアニ...
-
複数のJavaプログラムでデ...
-
ラベルの表示までが異常に遅い...
-
FormatNumberで、桁数を固定に...
-
doGetとdoPostの違い
-
ProgressBarが0%から動きません
-
アコーディオンメニューをアン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
tryの終了
-
Javaでのデバッグコード削除
-
Tomcat高負荷時の設定について
-
JavaScriptからJAVAクラスを呼...
-
[Java] while(true)の意味
-
数値の定数を付ける時
-
ラジオボタンの選択判定
-
JSP、サーブレットの初期処理
-
JavaでVBのDOEVENTSと同様の処...
-
JAVAからJAVASCRIPT関数を呼び出し
-
doGetとdoPostの違い
-
Delphiのマルチスレッドの割り...
-
C#で別スレッドの終了を知りたい
-
SwingUtilities.invokeLater(ne...
-
FocusLostでイベント処理を中断...
-
onBlurとonFocusの処理順序につ...
-
アコーディオンメニューをアン...
-
JAVAにおける画像のJPEG保存の...
-
Tomcatのスレッドを破棄する方法
-
C#でバックグラウンド処理から...
おすすめ情報