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

Kazunori Ito php-users@php.gr.jp
Mon, 9 Dec 2002 15:33:04 +0900


はじめまして。伊藤と申します。

現在の環境は以下のとおりです。
RedHatLinux6.2
apache 1.3.26
php 4.2.2
postgres 7.2



今回、PHP+PostgreSQLのシステムを構築するにあたり、
わからない事があるので質問させていただきます。

例えば、ある商品の情報をDBで管理する機能があるとして、
そのページの構成が以下のようになっているとします。
-------------------------------------------------------------
(1)商品選択ページ
 変更対象の商品を選択する
(2)商品情報編集ページ
 (1)で選択した商品の、現在の情報をテキストボックス等で
 表示(SELECT文で)し、変更内容を入力させるページ。
(3)確認ページ
 (2)で入力した情報をDBに反映する前に、確認するページ
(4)SQL発行ページ
 実際にSQLを発行して(UPDATE文などで)、データを変更するページ
--------------------------------------------------------------

このようなページに対して、何人ものユーザが同時にアクセスできるとすると、
(2)、(3)などのページで時間が経つ間に、他のユーザが同一データに対して
削除、変更の処理ができてしまいます。
(2)のページに入った時に、なんらかの方法でレコード、もしくは
テーブルに対してロックがかけられないないのでしょうか?

1つのページでSELECT→UPDATEならばFOR UPDATEなどを使って
トランザクション処理をすれば、データの不整合がある程度防げると思うのですが、
ページが分かれている場合ではどのようにデータをロックすればいいのか
わかりません。
やはり、各情報に編集中フラグみたいなものを持って、自力で
データをロックするしかないのでしょうか。。。

ほぼ、PostgreSQLの話になってしまうと思うのですが、
良い解決策などを知っている方がおられましたら
ご教授願います。