ロック

EXCLUSIVE MODE

1. 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を反映している。

参考


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2012-04-19 (木) 17:39:26 (2736d)