SQL 服务器:已提交读取中的原子更新,可以检测并发写入吗?
SQL Server: atomic update in read committed, can detect concurrent write?
如果我有同时使用读提交隔离级别和事务主体的并发事务,如下所示:
DECLARE @value..
SELECT @value = balance
FROM MyTable
WHERE Account = 1
UPDATE MyTable
SET balance = @value+@pAmount
WHERE Account = 1 AND Balance = @value
IF @@COUNT == 0
THROW 'another transaction changed'
当 UPDATE 的 WHERE 读取 Balance 列时,它是否保证读取已提交或是否读取另一个打开的事务的脏写?换句话说,我可以使用 READ COMMITTED 检测丢失的更新并检查我的更新是否有任何影响。
由于 @value
似乎是一个标量变量,我认为您只需一次更新就可以完成整个逻辑:
UPDATE MyTable
SET balance = balance + 1
WHERE Account = 1;
原因是 @value
应该始终只是第一个帐户的当前余额。
如果我有同时使用读提交隔离级别和事务主体的并发事务,如下所示:
DECLARE @value..
SELECT @value = balance
FROM MyTable
WHERE Account = 1
UPDATE MyTable
SET balance = @value+@pAmount
WHERE Account = 1 AND Balance = @value
IF @@COUNT == 0
THROW 'another transaction changed'
当 UPDATE 的 WHERE 读取 Balance 列时,它是否保证读取已提交或是否读取另一个打开的事务的脏写?换句话说,我可以使用 READ COMMITTED 检测丢失的更新并检查我的更新是否有任何影响。
由于 @value
似乎是一个标量变量,我认为您只需一次更新就可以完成整个逻辑:
UPDATE MyTable
SET balance = balance + 1
WHERE Account = 1;
原因是 @value
应该始终只是第一个帐户的当前余额。