家・車以外で、人生で一番奮発した買い物

オラクルのselect for updateでロックをするタイミングがいつですか?
こんなPL/SQLのコードがあったとします。

---↓↓↓ソースコードここから↓↓↓-------------------------

select * from テーブル1 where id = 1 for update; ・・・・・(a)



update テーブル1 set kingaku=100 where id = 1 ・・・・・(b)



commit;

---↑↑↑ソースコードここまで↑↑↑-------------------------

id = 1のレコードがロックされるのは(a)、(b)どちらのタイミングですか?
また、このロックは
・他トランザクションから読めるけど更新できない
・他トランザクションからは読むことすらできない
のどちらでしょうか?

よろしくお願いします。

A 回答 (2件)

こんにちわ。


#1 のmuyoshid です。

> ちなみに、そのソースはどこかにありますでしょうか?
この辺が参考になるでしょうか?
SQL 言語リファレンスのfor update 句の説明です。
http://docs.oracle.com/cd/E16338_01/server.112/b …

> 別の人を説得しなければいけないのです。
そうであれば、ユーザ登録が必要ですがOTN Japan から試用版をDownload して
実際に動かして確認した方が良いと思います。

参考URL:http://www.oracle.com/technetwork/jp/index.html
    • good
    • 0

こんにちわ。



> id = 1のレコードがロックされるのは(a)、(b)どちらのタイミングですか?
レコードがロックされるのは、(a) のタイミングです。

> また、このロックは
> ・他トランザクションから読めるけど更新できない
> ・他トランザクションからは読むことすらできない
他のトランザクションから読み込めますが、更新はできません。
また、(b) のupdate を実行しても、commit が完了するまでは
他のトランザクションからはUpdate 前のデータが読込まれます。
    • good
    • 0
この回答へのお礼

ありがとうございます。

ちなみに、そのソースはどこかにありますでしょうか?
決して疑っているわけではなくて、
別の人を説得しなければいけないのです。

もうひとつ、(a)からcommitの間で、別のトランザクションが、
同じようにselect ~ for update を行うとエラーになりますよね?

お礼日時:2014/09/01 08:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す


おすすめ情報