共有ロックと排他ロック

H2では、共有ロック (shared locks) と排他ロック(exclusive locks)の2種類のロックが存在する。

共有ロックは、SELECT で取得される。
排他ロックは、SELECT 〜 FOR UPDATE 、INSERT、UPDATE、DELETE などで取得される。

共有ロックが取得されている場合

SQL WAITするか?
SELECT しない
SELECT 〜 FOR UPDATE する
INSERT する
UPDATE する
DELETE する

排他ロックが取得されている場合

SQL WAITするか?
SELECT する
SELECT 〜 FOR UPDATE する
INSERT する
UPDATE する
DELETE する