原子增量平衡列

时间:2014-07-04 09:14:59

标签: sql-server atomic

MS SQL Server 2008 R2

假设我们有以下表格:

**MoneyTransactions**
 - Amount (int)
 - CustomerId (int)
 ...

Customers
 - Id (int)
 - balance (int)
 ...

如果同时执行100次,以下操作线程是否安全?

INSERT INTO Transactions(Amount, CustomerId, ...) Values(@myAmount, @customerId, ...)
UPDATE Customers SET Balance = Balance + @myAmount WHERE Id = @customerId

我的更新是以原子方式执行还是同步执行干扰并使余额损坏与交易金额的总和相比较?

如果可能,我想避免使用BEGIN TRAN/COMMIT TRAN

1 个答案:

答案 0 :(得分:-1)

  1. 如果是两个单独的SQL查询,则可以保证它们在一般情况下是线程安全的。
  2. 即使您不使用显式事务,SQL Server也可以使用implicit transactions。每次执行SQL查询时,MS SQL Server都会使用阻止。
  3. 表格上的锁定取决于您使用的transaction isolation level