「SELECT ~ FOR UPDATE」の挙動について
924288Mar 19 2012 — edited Mar 20 2012「SELECT ~ FOR UPDATE」に対して、私は、「SELECT文を実行した際、行レベルでロックをするための SQL 文」であると。理解しています。
上記を前提で、質問させていただきます。
ora40のスキーマに以下、t1表が存在しているといます。
≪t1≫
A | B
------------------------------------
1 | AAA
2 | BBB
3 | CCC
≪t1≫に対して、2つのSQL*PLUSを起動して(どちらもora40ユーザ)アクセスします。(以下4パターン)
SQL*PLUS① SQL*PLUS②
----------------------------------------------------------------------------------------------------------
① select * from t1; select * from t1; ⇒ SQL*PLUS②で検索可能
② select * from t1; select * from t1 for update; ⇒ SQL*PLUS②で検索可能
③ select * from t1 for update; select * from t1 for update; ⇒ SQL*PLUS②で検索不可能(行ロックかかるため)
④ select * from t1 for update; select * from t1; ⇒ SQL*PLUS②で検索可能(???)
上記④で、検索できるのはなぜでしょうか?
SQL*PLUS①で for update を指定しているので、 SQL*PLUS②で行ロックがかかると想定していました。