[PHP-users 12106] Re: ページをまたいで、DB のデータをロックする方法について

Kazunori Ito php-users@php.gr.jp
Mon, 9 Dec 2002 16:41:43 +0900


伊藤です。

重松さん、早速のお返事ありがとうございます。


> 商品の情報のアップデートにいく時に、WHERE 以下に
> 自分の知っている情報を列挙します。
>
> そうすれば、自分以外の他人が編集した後にアップデートしようとしても、
> できませんから、一応排他処理もどきにはなりますね。
> そして、テーブルの定義を変更しなくてもよいというメリットもあるかと。
>
> 項目が多い場合には、sequence でも、持たせておいて、
> アップデートするときにサイクリックにインクリメントすれば、
> すべてのオリジナルのデータ内容を保持しなくてもいいかと思います。
なるほど。こういう方法は思いつきませんでした。ありがとうございます。
1つ確認したいのですが、この方法だと

(1)1人目のユーザがアップデートしようとする
 →シーケンスの値をインクリメント
(2)1人目のユーザが編集中・・・
(2)'2人目のユーザがアップデートしようとする
 →シーケンスの値をインクリメント
(3)1人目のユーザがSQL発行ページへ
 →シーケンスの値が異なるので、アップデート失敗
(4)2人目のユーザがSQL発行ページへ
 →シーケンスの値が一致するのでアップデート成功

ということで、後からアップデートしようとしたユーザが
優先されるということですよね?