Yanor.net/
Wiki
Blog
GitHub
Sandbox
開始行:
* 行ロック - FOR UPDATE [#o09f5d72]
** FOR UPDATE [#i82e08c7]
Session A | Se...
========================================================...
=> BEGIN; SELECT * FROM t1 WHERE id = 1 FOR UPDATE; | ...
| ...
id | n | ...
----+----- | ...
1 | 200 | ...
| =>...
| TE...
| ...
=*> UPDATE t1 SET n = 100 WHERE id = 1; | ...
=*> COMMIT; | ...
| i...
| --...
| ...
** FOR UPDATE NOWAIT [#e0fede94]
Session A ...
========================================================...
=> BEGIN; SELECT * FROM t1 WHERE id = 1 FOR UPDATE NOWAI...
id | n ...
----+----- ...
1 | 100 ...
...
...
...
...
...
...
...
=*> UPDATE t1 SET n = 200 WHERE id = 1; ...
=*> COMMIT; ...
...
...
...
...
...
...
** FOR UPDATE SKIP LOCKED [#u637a2c3]
Session A | Session B ...
========================================================...
=> BEGIN; SELECT * FROM t1 WHER | => ...
E id = 1 FOR UPDATE SKIP LOCKED | => ...
; | => ...
id | n | => ...
----+----- | => ...
1 | 200 | => ...
| => ...
=*> | => BEGIN; SELECT * FRO...
=*> | E id = 1 OR id = 2 FOR...
=*> | KIP LOCKED; ...
=*> | id | n ...
=*> | ----+----- ...
=*> | 2 | 100 ...
=*> | ...
=*> UPDATE t1 SET n = 200 WHERE | =*> ...
id = 1; | =*> ...
=*> COMMIT; | =*> ...
=> | =*> SELECT * FROM t1; ...
| id | n ...
| ----+----- ...
| 2 | 100 ...
| 3 | 100 ...
| 1 | 200 ...
| ...
終了行:
* 行ロック - FOR UPDATE [#o09f5d72]
** FOR UPDATE [#i82e08c7]
Session A | Se...
========================================================...
=> BEGIN; SELECT * FROM t1 WHERE id = 1 FOR UPDATE; | ...
| ...
id | n | ...
----+----- | ...
1 | 200 | ...
| =>...
| TE...
| ...
=*> UPDATE t1 SET n = 100 WHERE id = 1; | ...
=*> COMMIT; | ...
| i...
| --...
| ...
** FOR UPDATE NOWAIT [#e0fede94]
Session A ...
========================================================...
=> BEGIN; SELECT * FROM t1 WHERE id = 1 FOR UPDATE NOWAI...
id | n ...
----+----- ...
1 | 100 ...
...
...
...
...
...
...
...
=*> UPDATE t1 SET n = 200 WHERE id = 1; ...
=*> COMMIT; ...
...
...
...
...
...
...
** FOR UPDATE SKIP LOCKED [#u637a2c3]
Session A | Session B ...
========================================================...
=> BEGIN; SELECT * FROM t1 WHER | => ...
E id = 1 FOR UPDATE SKIP LOCKED | => ...
; | => ...
id | n | => ...
----+----- | => ...
1 | 200 | => ...
| => ...
=*> | => BEGIN; SELECT * FRO...
=*> | E id = 1 OR id = 2 FOR...
=*> | KIP LOCKED; ...
=*> | id | n ...
=*> | ----+----- ...
=*> | 2 | 100 ...
=*> | ...
=*> UPDATE t1 SET n = 200 WHERE | =*> ...
id = 1; | =*> ...
=*> COMMIT; | =*> ...
=> | =*> SELECT * FROM t1; ...
| id | n ...
| ----+----- ...
| 2 | 100 ...
| 3 | 100 ...
| 1 | 200 ...
| ...
ページ名: