ODBC-JDBCブリッジドライバを使用してJAVA⇒AccessMDBにアクセスしています。
基本的な質問で申し訳ございません。
○テーブルの構成
テーブル・・・登録数テーブル
カラム・・・登録数
(1レコード1カラムのみのテーブルで登録数を管理するカウントマスタみたいなもの)
○JAVAアプリケーション
Connection 開始
UPDATE 登録数テーブル SET 登録数 = 登録数 + 1
SELECT 登録数 FROM 登録数テーブル ⇒登録数を標準出力
COMMIT
Connection 終了
○質問
上記アプリケーションをマルチ(多重)で動かした場合でも
登録数は1ずつカウントアップしますでしょうか?
言い方を変えますと必ず最初にUPDATEしたトランザクションが
コミットするまで他のトランザクションはUPDATEできないと思って
よろしいでしょうか?
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
ORACLEのシーケンスなどのようにトランザクションに左右されず必ずアトミックにインクリメントされるようなDBオブジェクトでない限り、値は重複しますよ。
登録数:0の状態で、Aセッション、Bセッションがほぼ同時に動いたとします。
AセッションのUPDATE→1にインクリメント
BセッションのUPDATE→1にインクリメント
AセッションCOMMIT
BセッションCOMMIT(AのCOMMITを待ってから)
最終的な登録数:1
と言う事で要件を満たす事はできません。
setTransactionIsolationの分離レベルを何で定義するかにもよりますが、そもそもAccess
の mdb では4モードすべてをサポートしていないだろうし、仮に一番シビアなSERIALIZABLEが指定できたとしても同時アクセスが繁多であれば、あっと言う間にデッドロックの嵐で動かなくなる事、必至だと思います。
(この辺は詳しくないので、このカテの識者のご意見を伺いたいところです)
本題から外れますが、削除された質問について言えば、AccessにはFOR UPDATEの類のロックを制御すつ句はありません。
また、ロックの単位はページレベルロックですので、ORACLEのように行をターゲットしてロックする事もできません。
さらに本題とは外れますが、Accessのmdbは、このような複数セッションからの同時更新には向きません。
(よく破損します)
せめて、MySQL か PostgreSQL にした方がいいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- Oracle sqlで質問です。 Aテーブルの登録番号をキーにBテーブルから確認番号を取得したいのですが、Bテーブ 4 2023/05/18 13:08
- SQL Server DBのテーブルの設計ができず困っています。 2 2023/06/29 16:43
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- Visual Basic(VBA) VBA 登録ボタンを省略してエンターキーで作業 4 2022/07/09 22:29
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- LINE LINEのリンクとQRコード。 1 2022/11/18 19:41
- ポイントサービス・マイル 楽天カードで番号の登録と抹消の繰り返しは? 1 2022/09/10 17:39
- Access(アクセス) テキストボックスの値をテーブルに入力したい 2 2022/06/28 12:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CD-Rに追記したときに消え去っ...
-
Apacheでセッション管理
-
コネクション・セッション・ト...
-
ブラウザの×(閉じる)ボタンの...
-
DVD-Rの「セッションを閉じる」...
-
DVDの中身が表示されません。
-
コンピュータへの接続数が最大...
-
フォームデータをlocation.repl...
-
c# 文字列の最後から1文字削除...
-
Webページ上のボタン等の位置を...
-
ASPで画面間のパラメタ受け渡し
-
asp.NET初心者です。「 ’Contex...
-
テキストボックスのクリックで...
-
勝手にログアウトされてしまい...
-
Excel:「フォーム」のボタンで...
-
Q&Aフォームを作成したいのです...
-
フォームに入力した文字列「○○○」...
-
C#でドラッグ&ドロップが機能し...
-
INPUTのボタン周囲のスペース
-
ボタンを押さずにボタンを押す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コネクション・セッション・ト...
-
DVD-Rの「セッションを閉じる」...
-
コンピュータへの接続数が最大...
-
ブラウザの×(閉じる)ボタンの...
-
ブラウザを閉じずにセッション...
-
DVDの中身が表示されません。
-
セッションIDを取得したい
-
会社への勤怠届出にGoogleフォ...
-
フォームデータをlocation.repl...
-
ASP.NET 電卓計算
-
セッションIDについて
-
ルータのPPPのランプの色が変
-
SESSIDってなんですか?
-
自分のPCへアクセスしているコ...
-
DVDデータ追記時に、ポカ しま...
-
別ブラウザにセッションを渡す...
-
サーバー上の全セッション変数...
-
多段プロキシが原因?
-
ODBC-JDBCブリッジドライバを使...
-
CD-Rに追記したときに消え去っ...
おすすめ情報