- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- PostgreSQL/SQL/ロック/行ロック - FOR UPDATE へ行く。
- 1 (2021-06-17 (木) 13:14:55)
行ロック - 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)
|
| =*>
|