[前][次][番号順一覧][スレッド一覧]

mysql:6606

From: shogo <shogo <sho@xxxxxxxxxx>>
Date: Sun, 24 Nov 2002 02:32:09 +0900
Subject: [mysql 06606] MySQL におけるロックについて

はじめまして。河瀬と申します。

まだMySQLを初めて数ヶ月なので、初心者的な質問かも知れませんがお許しください。

MySQLのMyISAMテーブルを対戦型ゲームのユーザー情報に使用しています。
処理としては

1.ユーザー情報をSELECTにより取得
2.対戦相手情報をSELECTにより取得
3.PHPで対戦処理
4.ユーザー情報をUPDATE
5.対戦相手情報をUPDATE

という流れになっています。実際には0.1秒以内に終わるような処理なのですが、
同時に多数のアクセスがあるので、同じレコードに対して複数のスレッドからの
アクセスを想定した場合、UPDATE前のデータをSELECTされては困ります。

そのため、テーブル(またはレコード)のロックを考えているのですが、
SELECT2回、UPDATE2回という短い処理においてテーブルをロックするのはあまり
効率的とは思えず、マニュアルを読んでいるのですが良い方法が思いつきません。

そこでSELECT 〜 FOR UPDATE構文を見つけたのですが、その部分についての
記述がよく理解できず、結局どのような方法を使えばいいのかがわからずじまいとなっています。

もしよろしければ、どなたかお知恵をお貸しください。

なお、開発(デバッグ)環境は
Windows 2000 SP3 + PHP 4.2.2 + MySQL 3.23.51
サーバー環境は
Linux(バージョン不明) + PHP 4.1.2 + MySQL (バージョン不明。2001/11/21時点での安定版だと思います)
です。

よろしくお願いいたします。

[前][次][番号順一覧][スレッド一覧]

->    6606 2002-11-24 02:32 [shogo <sho@xxxxxxxxx] MySQL におけるロックについて            
      6607 2002-11-24 17:44 ┗[Tomoyuki Ishino <ish]                                       
      6610 2002-11-24 19:08  ┗[とみたまさひろ <tomm]                                     
      6611 2002-11-24 19:57   ┣[Tomoyuki Ishino <ish]                                   
      6625 2002-11-26 19:07   ┗[shogo <sho@xxxxxxxxx]                                   
      6628 2002-11-27 00:07    ┗[とみたまさひろ <tomm]                                 
      6629 2002-11-27 02:24     ┗[Tomoyuki Ishino <ish]                               
      6630 2002-11-27 03:02      ┣[とみたまさひろ <tomm]                             
      6631 2002-11-27 15:47      ┗[遠藤 俊裕 <endo_t@xx]                             
      6633 2002-11-28 19:38       ┗[Takeyuki Miyagawa <m]