回答編集履歴

2

説明追記

2021/03/10 08:33

投稿

hatena19
hatena19

スコア34073

test CHANGED
@@ -5,3 +5,43 @@
5
5
 
6
6
 
7
7
  連番テーブルを参照/更新を試みたときに、ロックされていて失敗したら時間を置いて再参照するようにします。
8
+
9
+
10
+
11
+ ---
12
+
13
+ 現状は、
14
+
15
+ ユーザーAが新規レコードの入力を始めると同時に、連番テーブルから連番を取得する。
16
+
17
+ 入力後、保存する、同時に連番テーブルの連番も更新する。
18
+
19
+ という方法になっているのだと推測します。
20
+
21
+
22
+
23
+ この方法で行くなら、ユーザーAが入力中は連番テーブルは排他ロックして更新できないようにする必要があります。しかし、それではマルチユーザーで共有している場合はだれかが入力中は他ユーザーは入力できません。これは使い勝手が悪いです。
24
+
25
+
26
+
27
+ 上記の回答の方法は、
28
+
29
+ ユーザーAが新規レコードの入力を始めると同時に、
30
+
31
+ 連番テーブルから連番を取得し、連番に+1してすぐに保存する。
32
+
33
+ 他のフィールドを入力後保存する。
34
+
35
+ です。この方法なら重複することはないですが、入力途中でキャンセルした場合は、連番に抜けができます。
36
+
37
+
38
+
39
+ 連番に抜けがでないようにするなら、
40
+
41
+ 新規レコードの入力を始めるときは連番は取得せずに、
42
+
43
+ 入力後保存するときに、連番取得、+1して更新とします。
44
+
45
+
46
+
47
+ この3つの方法からの選択になります。

1

説明の改善

2021/03/10 08:33

投稿

hatena19
hatena19

スコア34073

test CHANGED
@@ -1,7 +1,7 @@
1
1
  マルチユーザーでの連番処理は、連番を取得すると同時に+1して更新しておくのが通常のやり方かと。
2
2
 
3
- その間は他のユーザーは参照できないようにロックしておく。(ロックする時間は最小限になるように)
3
+ その間は他のユーザーは更新できないように排他的ロックしておく。(ロックする時間は最小限になるように)
4
4
 
5
5
 
6
6
 
7
- 連番テーブルを参照たときに、ロックされていて失敗したら時間を置いて再参照するようにします。
7
+ 連番テーブルを参照/更新を試みたときに、ロックされていて失敗したら時間を置いて再参照するようにします。