処理の流れとしてはこうです。
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で質問しましょう!
似たような質問が見つかりました
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Excel(エクセル) ネットワーク上のエクセルとリンクしている時にデータ更新をvbaで、refresh Allで行う場合の 2 2023/04/10 05:39
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
tryの終了
-
SwingUtilities.invokeLater(ne...
-
doGetとdoPostの違い
-
JAVA ID重複処理
-
Java ファイルが生成させたか確...
-
Javaプログラムからポップアッ...
-
JavaScriptからJAVAクラスを呼...
-
データ未入力時のエラー処理が...
-
onBlurとonFocusの処理順序につ...
-
Tomcatのスレッドを破棄する方法
-
JSPで「処理中」をブラウザに表示
-
jqueryのmouseenterイベントの...
-
Ajaxの実行速度と読み方について
-
チェックボックスの入力チェッ...
-
ラジオボタンの選択判定
-
複数リクエストの扱い
-
Androidアプリで本体の音量変更...
-
ブラウザを閉じた後のサーバ側...
-
PHPでDB処理中にプログレスバー...
-
Tomcat高負荷時の設定について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
tryの終了
-
数値の定数を付ける時
-
Javaでのデバッグコード削除
-
C#で別スレッドの終了を知りたい
-
[Java] while(true)の意味
-
Tomcatのスレッドを破棄する方法
-
Javaプログラムからポップアッ...
-
ラジオボタンの選択判定
-
JavaScriptからJAVAクラスを呼...
-
WPF C#でF10のイベント取得方法...
-
PHPでDB処理中にプログレスバー...
-
素数判定を再帰処理で
-
Javaアプリケーション実行の返...
-
switch文の中に、throws new Ex...
-
doGetとdoPostの違い
-
JDBCでテーブルUPDATE後の再検...
-
Tomcat高負荷時の設定について
-
ラベルの表示までが異常に遅い...
-
ExcelVBA で文字列の特定の文字...
-
SwingUtilities.invokeLater(ne...
おすすめ情報