[pgsql-jp: 34516] Re: データ登録時の重複チェックについて
Tietew
tietew @ tietew.net
2004年 12月 21日 (火) 20:13:36 JST
On Tue, 21 Dec 2004 19:54:34 +0900
In article <200412211049.iBLAnfvc015830 @ uxdcc002.daikodenshi.co.jp>
[[pgsql-jp: 34514] Re: データ登録時の重複チェックについて]
ngy.yt @ daikodenshi.co.jp wrote:
> >> Webアプリケーションで、商品の登録をさせようとしているのですが、一人の人が同日に
> >> 同じ商品を登録できないよう、テーブルを「EXCLUSIVE MODE」でロックをかけ、チェッ
> >> クを行っています。
> >> チェック方法は下記の通りです。
> >> BEGIN
> >> LOCK TABLE goods IN ACCESS EXCLUSIVE MODE
> >
> >ACCESS EXCLUSIVE MODE だと単純 SELECT までブロックしてしまうので
> >EXCLUSIVE MODE のロックならそんなに処理は遅くならないと思います。
>
> EXCLUSIVE MODEのロックですと、SELECTが流れてしまいますので、ユーザの方が登録
> ボタンをダブルクリックした場合に、二重登録されてしまう恐れがありましたので、ACCESS
> EXCLUSIVE MODEでロックする方法を取りました。
ええと。そのような場合でも LOCK TABLE でブロックするので大丈夫で
はないですか?
プロセス1 プロセス2
| |
[ 更新ボタン ] |
| [ 更新ボタン ]
[ BEGIN ] |
| [ BEGIN ]
[ LOCK TABLE ] |
| [ LOCK TABLE ] <== ここでblock
[ SELECT ] |
| |
[ INSERT ] |
| |
[ COMMIT ] | <== ロックが外れる
| [ SELECT ]
◎ |
重複検出
|
[ ROLLBACK ]
|
◎
登録処理の時に重複チェック SELECT の前に必ず LOCK TABLE を通るよ
うにすれば ACCESS EXCLUSIVE MODE を使う必要はありません。
EXCLUSIVE MODE で十分です。
―[ Tietew ]――――――――――――――――――――――――――――
Mail: tietew @ tietew.net / tietew @ raug.net
Web : http://www.tietew.net/ Tietew Windows Lab.
PGP fingerprint: 26CB 71BB B595 09C4 0153 81C4 773C 963A D51B 8CAA
pgsql-jp メーリングリストの案内