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

Osamu Shigematsu php-users@php.gr.jp
Tue, 10 Dec 2002 10:45:56 +0900


重松です。こんにちは。

要点は、

> ご意見ありがとうございます。
> 確かにそうですね。やはり、複数ページでロックをかけるという処理は
> 途中でどのページにも逃げれてしまうWebでは、
> どうしても危険な処理になりそうです。

に尽きると思います。

で、結局のところは、自分が最初に取得したデータベースの状態と、
その後、UPDATE しようとしているときのデータベースの状態が
同じか、否か、ということで処理するのが私はスマートともいます。

同じなら、問題がないわけで、同じでないなら、中断するなり、
上書き機能をつけるなり、いろいろやり方はあると思います。

すべての項目に自分がデータを取得した時点での情報で検索して、
UPDATE するのも、sequence を使うのも、
他のユーザが編集したデータを上書きしない、
ということを保障するためでしかないのですが、
もうひとつ思い出した方法があります。

かなり作りこんでから、排他制御しなくていい、がしてほしいになって、
テーブルを変更することはしたくないし、すべてのデータを持ちまわすように
作ってなかったので、最初に引っ張ってきたデータの配列を serialize() して、
md5() でハッシュを作り、それをページをまたがって渡して、
UPDATE するときに、同じようにハッシュを求めて、
データが同一かどうか、それなりに確認したことがありました。

まあ、手抜きですけど、何もしないよりは、著しくマシですし、
こういう手法もある、ということで、参考になればと思います。

-- 
Osamu Shigematsu <m5issige@mr.hitachi-medical.co.jp>