ロック

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