行ロック - FOR SHARE

 Sesseion A                       | Session B                       |
 ======================================================================================================
  => BEGIN; SELECT * FROM t1 WHER | =>                              | 1. FOR SHAREでSELECTすると、
  E id = 1 FOR SHARE;             | =>                              |    id=1な行がロックされるが、
   id |  n                        | =>                              | 
  ----+-----                      | =>                              | 
    1 | 100                       | =>                              | 
                                  | =>                              | 
  =*>                             | => BEGIN; SELECT * FROM t1 WHER | 2. 別のセッションからSELECTし
                                  | E id = 1 FOR SHARE;             |    ても、ブロックされずにSELECTが
                                  |  id |  n                        |    実行される
                                  | ----+-----                      |    もしAがFOR UPDATEでSELECTして
                                  |   1 | 100                       |    いたら、BのSELECTはブロックされ
                                  |                                 |    て、AがCOMMITするまでBは実行さ
                                  |                                 |    れない
                                  |                                 |

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS