我有一个小木屋表,其中一个小木屋被一个帐户引用......
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
我认为问题在于,如果此查询同时运行,则一个查询可能会锁定一个表的一半,而另一个查询可能会锁定另一半,并且会确保死锁。有没有解决的办法?例如,是否可以将选定的小屋行锁定在相同的顺序中?
干杯,伊恩。