こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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 を排他防御できるのか無理なのか、
教えていただけたらありがたいです。

すみません、時間的余裕があまりないので、
(すぐに回答ほしいです)でアップします。

投稿日時 - 2007-11-26 23:28:06

QNo.3549816

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

ロックする対象がなければ、ロックのしようがありません。
インサートするレコードのキーを予約する意味での行為なら、そのような手法ではだめです。

代替え策ですが、FOR-UPDATEで存在チェック&インサート予約、その後にじっくりインサートするのでなく、
いきなりプライマリーキーだけインサートして、インサートできたなら、存在チェックOK&予約済みとし、
後でその他のデータを更新すると良いかと思います。
もし、更新を辞めたいなら、ロールバックすれば良いかと。

投稿日時 - 2007-11-27 01:32:46

あなたにオススメの質問