行ロック - FOR UPDATE

 Session A                                           | Session B
 ========================================================================================================          
 => BEGIN; SELECT * FROM t1 WHERE id = 1 FOR UPDATE; | 
 BEGIN                                               | 
  id |  n                                            |
 ----+-----                                          |
   1 | 200                                           |
 (1 row)                                             |
                                                     |
 # (1) ↑のSELECTの結果はすぐに表示される            |
                                                     | => BEGIN; SELECT * FROM t1 WHERE id = 1 FOR UPDATE;
                                                     | BEGIN
                                                     |  
                                                     | # (2) ↑のSELECTはブロックされ、すぐには表示されない
                                                     |
 # (3) ↓のUPDATEがCOMMITされると、                  |
                                                     |
 =*> UPDATE t1 SET n = 100 WHERE id = 1;             | 
 UPDATE 1                                            | 
 =*> COMMIT;                                         | 
 COMMIT                                              |
                                                     |
                                                     | # (4) 左のAのCOMMITが終わると、ブロックが解除されて
                                                     | # SELECTの結果が↓のように表示される
 =>                                                  |
                                                     |  id |  n
                                                     | ----+----- 
                                                     |   1 | 100  
                                                     | (1 row)    
                                                     |            
                                                     | =*>        
                                                     |

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