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

mysql:6607

From: Tomoyuki Ishino <Tomoyuki Ishino <ishino@xxxxxxxxxx>>
Date: Sun, 24 Nov 2002 17:44:50 +0900
Subject: [mysql 06607] Re: MySQL におけるロックについて

石野です。こんにちは。

* [mysql 06606] MySQL におけるロックについて
* shogo <sho@xxxxxxxxxx> wrote:

> 
> MySQLのMyISAMテーブルを対戦型ゲームのユーザー情報に使用しています。
> 処理としては
> 
> 1.ユーザー情報をSELECTにより取得
> 2.対戦相手情報をSELECTにより取得
> 3.PHPで対戦処理
> 4.ユーザー情報をUPDATE
> 5.対戦相手情報をUPDATE
> 
> という流れになっています。実際には0.1秒以内に終わるような処理なのですが、
> 同時に多数のアクセスがあるので、同じレコードに対して複数のスレッドからの
> アクセスを想定した場合、UPDATE前のデータをSELECTされては困ります。
> 
> そのため、テーブル(またはレコード)のロックを考えているのですが、
> SELECT2回、UPDATE2回という短い処理においてテーブルをロックするのはあまり
> 効率的とは思えず、マニュアルを読んでいるのですが良い方法が思いつきません。
> 
> そこでSELECT 〜 FOR UPDATE構文を見つけたのですが、その部分についての
> 記述がよく理解できず、結局どのような方法を使えばいいのかがわからずじまいとなっています。
> 

要件を正確に把握してないですが、MyISAMテーブルでレコードレベルのロックを
実現したいなら、GET_LOCK関数を使われてみてはいかがでしょうか。
http://www.mysql.gr.jp/jpdoc/3.23.x/manual.ja_Reference.html#Miscellaneous_functions

select for update はトランザクションをサポートしているテーブルタイプでしか
有効ではないですし、selectに関しては衝突は起こりません。(=読み込みに関しては
ロックされません。)

--
Tomoyuki ISHINO


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

      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]