Postgresql允许我在使用以下语法选择行时锁定行:
select id, amount from table where id = 1234 for update
这允许我更新行,同时确保同时读取谁也想要更新同一行的更新和更正结果。
基本上我可以做这样的事情(伪代码):
begin transaction
select id, amount from table where id = 1234 for update
if(amount == new_amount) then
delete from table where id = 1234;
else
update table set amount = amount - new_amount where id = 1234
end
commit transaction
仅在DECLARE CURSOR中,Sql Server中允许使用相同的语法。有没有办法读取行,同时锁定它以进行更新只需简单的选择?
答案 0 :(得分:3)
select * from T WITH (UPDLOCK)
WITH
提示非常灵活且设计精良。我猜它们比for update
更加精确和通用。