ロック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を反映している。 参考 |
|