[pgsql-jp: 27682] Re: テーブルにロックがかからない

matsuda yumatuda @ msoft.co.jp
2002年 10月 18日 (金) 15:42:29 JST


はじめまして、エムソフトの松田と申します。

手前味噌で申し訳ないのですが、私が質問した内容と
近い物があるのではないでしょうか?
非常に興味深い回答を沢山頂きましたが、
私が以下のメールにて解決方法をお送りしましたので
参考にされてはいかがでしょうか?

[pgsql-jp: 27675] Re: テーブルの同時更新を防ぐには?

shushu2 <shushu2 @ yahoo.co.jp> wrote:

> 外川と申します。PHPのソースコードなので
> PHPのMLに書くべきかと思いましたがSQLの質問なので
> こちらに質問させていただきました。ご了承くださいませ。
> 
> 下記のような記述でテーブルロックのテストをしていたのです
>> 2つのブラウザで時間差でアクセスするとインサートされる
> IDがだぶって登録されてしまいます。
> 私のイメージですと
> Aのブラウザで下記PGを実行すると
> Bのブラウザで実行された下記PGはAのブラウザより
> 実行されたPGがCOMMITされるのを待って
> 最新IDを取得してインサートしてくれると思ったのですが。
>> どのような記述をしたら同じPGを時間差でアクセスした場合
> IDが競合せず採番できるのかご教授ください。
> シリアル型使えば簡単かと思うのですが事情があって
> テーブルの構成は変えられないんです。。。
> よろしくお願いします。
> 
> $conn->query("BEGIN");
> $conn->query("LOCK TABLE test IN ACCESS SHARE MODE");
> for($i=0 ; $i<300 ; $i++){
>     // 最新ID主特
>     $sql="select max(id)+1 from test";
>     $conn->query($sql);
>     $conn->next_record();
>     $id = $conn->f("max");
>     $sql = "insert into ttt values($id)";
>     $conn->query($sql);
> }
> $conn->query("END");
> 
> __________________________________________________
> Do You Yahoo!?
> Yahoo! BB is Broadband by Yahoo!  http://bb.yahoo.co.jp/
> 




pgsql-jp メーリングリストの案内