ロックEXCLUSIVE MODE1. taroがロックを掛けて、INSERTを実行taro=# SELECT * FROM t1; num ----- 1 2 (2 行) taro=# BEGIN; LOCK TABLE t1 IN EXCLUSIVE MODE; ロックを実行する。 taro=# INSERT INTO t1 ( num ) SELECT MAX(num) + 1 FROM t1; INSERTを実行する。 taro=# SELECT * FROM t1; num ----- 1 2 3 (3 行) この時点でまだCOMMITしない。 2. hanaがINSERTを実行hana=# SELECT * FROM t1; num ----- 1 2 (2 行) SELECTは実行できるが、結果には1.のINSERTは反映されてない。 hana=# INSERT INTO t1 ( num ) SELECT MAX(num) + 1 FROM t1; このINSERTはブロックされる。 3. taroがCOMMITを実行taro=# COMMIT; このCOMMITにより、2.のINSERTのブロックが解除される。 taro=# SELECT * FROM t1; num ----- 1 2 3 4 (4 行) numの値"3"が1.の、"4"が2.のINSERTを反映している。 参考 |
|