シャレーがアカウントによって参照されるシャレーのテーブルがあります...
CHALET
------
int ChaletId PK
int Berth
ACCOUNT
-------
int AccountId PK
int ChaletId FK
シャレーは参照されていないところから始まります。ユーザーがシャレーを購入すると、コードは参照されていないシャレーを見つけて、新しく作成されたアカウントに割り当てる必要があります。返されたシャレーには、同時購入者が同じシャレーに割り当てられないようにするために、それを参照するアカウントがコミットされるまで UPDLOCK が必要であると思います。
シャレーをフェッチする SELECT をどのように記述できますか? こんなことを考えていた..
SELECT * FROM CHALET WITH (UPDLOCK) c
LEFT JOIN ACCOUNT a
ON c.ChaletId = a.ChaletID
WHERE a.ChaletID is null
AND Berth = 4
問題は、このクエリが同時に実行されている場合、あるクエリが一方のテーブルの半分をロックし、別のクエリが残りの半分をロックし、デッドロックが確実になることだと思います。これを回避する方法はありますか?たとえば、選択したシャレーの行を同じ順序でロックすることは可能ですか?
乾杯、イアン。