• ベストアンサー

排他について

UPDATEやINSERT処理をロックをかけて防ぐことはできるんですが、select文も同じように防ぐことってできないんでしょうか? for updateでロックをしていますが、読み取りはいけるのでselectは発行されちゃいます。 何か良い方法があればよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • uresiiwa
  • ベストアンサー率45% (49/107)
回答No.2

DB2であれば(たしかSQLサーバも)質問の分離レベル動作が可能なのですが、 OracleではSELECTをブロックすることはできません。 更新中であってもUNDO情報を使って読み取りが実行されます。 参考URL載せときました。 ご質問の方法は、アプリケーション側で実装するしかありませんね。 たとえばロック管理テーブルを準備し、そこに誰か更新中ロック情報を登録中であればSELECTを取りやめる、などです。 SELECTする場合もSELECT FOR UPDATE取得しちゃうかですね。 後者の場合はロックが頻発して動作が遅くなったり、デッドロックの元とならないか、よくよく考えて設計する必要があります。

参考URL:
http://www.atmarkit.co.jp/fdb/rensai/rdbmsarc04/rdbmsarc04_1.html

その他の回答 (2)

  • trictrac
  • ベストアンサー率38% (10/26)
回答No.3

select ・・・ from ・・・ where ・・・ for update nowait で、できますよ。

  • ttschool
  • ベストアンサー率28% (18/64)
回答No.1

UPDATEでもINSERTでもSELECTは発行されるでしょう? 何を言っているんだ? デッドロックを起こしたいのか?

関連するQ&A