- 締切済み
SELECT FOR UPDATE で該当レコードがなかった場合
SELECT FOR UPDATE ですが、該当レコードのみ ロックすると思うんですが、 該当レコードがない場合は、 ロックできないんでしょうか? たとえば、(COLUMN_BBB が PK として) SELECT * FROM TABLE_AAA WHERE TABLE_AAA.COLUMN_BBB = 'BBB' FOR UPDATE で、そもそも SELECT * FROM TABLE_AAA WHERE TABLE_AAA.COLUMN_BBB = 'BBB' となるレコードがない場合でも、 他トランザクションによる 該当レコードの INSERT を排他防御できるのか無理なのか、 教えていただけたらありがたいです。 すみません、時間的余裕があまりないので、 (すぐに回答ほしいです)でアップします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
回答No.1
ロックする対象がなければ、ロックのしようがありません。 インサートするレコードのキーを予約する意味での行為なら、そのような手法ではだめです。 代替え策ですが、FOR-UPDATEで存在チェック&インサート予約、その後にじっくりインサートするのでなく、 いきなりプライマリーキーだけインサートして、インサートできたなら、存在チェックOK&予約済みとし、 後でその他のデータを更新すると良いかと思います。 もし、更新を辞めたいなら、ロールバックすれば良いかと。