アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

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

A 回答 (1件)

ロックする対象がなければ、ロックのしようがありません。


インサートするレコードのキーを予約する意味での行為なら、そのような手法ではだめです。

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

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

このQ&Aを見た人はこんなQ&Aも見ています

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


このQ&Aを見た人がよく見るQ&A