質問 |
||
| QNo.3549816 | SELECT FOR UPDATE で該当レコードがなかった場合 | |
|---|---|---|
| 質問者:rrqbq |
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 を排他防御できるのか無理なのか、 教えていただけたらありがたいです。 すみません、時間的余裕があまりないので、 (すぐに回答ほしいです)でアップします。 |
|
困り度:
|
||
| 質問投稿日時: 07/11/26 23:28 |
||
回答 |
|
| ANo.1 | ロックする対象がなければ、ロックのしようがありません。 インサートするレコードのキーを予約する意味での行為なら、そのような手法ではだめです。 代替え策ですが、FOR-UPDATEで存在チェック&インサート予約、その後にじっくりインサートするのでなく、 いきなりプライマリーキーだけインサートして、インサートできたなら、存在チェックOK&予約済みとし、 後でその他のデータを更新すると良いかと思います。 もし、更新を辞めたいなら、ロールバックすれば良いかと。 |
|---|---|
| 回答者:k_o_r_o_c_h_a_n | |
| 種類:回答 どんな人:一般人 自信:参考意見 |
|
| 回答日時: 07/11/27 01:32 |
|
| |
| この回答への補足 | この回答に補足をつける(質問者のみ) |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |