在隔离问题中更新聚合列

时间:2010-08-06 14:02:39

标签: sql-server transactions isolation-level

我有一个交易和交易表,其中交易表有一个聚合列,'TotalSales',这只是每笔交易的交易数量。

使用以下命令,交易行计数和总销售额是否有可能不同步(不包括删除行)?默认隔离级别是否适用于此?我们有很多用户可能同时进行购买,所以我试图找出处理这个问题的最佳方法。

BEGIN TRANSACTION
INSERT INTO [transaction] ... 

UPDATE deal
SET TotalSales = (select count(*) from [transaction] where dealid = @dealId)
WHERE dealId = @dealId 
COMMIT TRANSACTION

1 个答案:

答案 0 :(得分:1)

我对这些事情的偏好是使用视图:

CREATE VIEW vw_sales AS
AS 
       SELECT t.dealid, 
                   COUNT(*) AS total_sales
          FROM TRANSACTION t
  GROUP BY t.dealid

保持值同步不那么麻烦,不存储冗余数据......

它同样容易受到隔离级别问题的影响 - 默认是读取已提交的数据。读取总销售额的未提交数据将为Bad(tm)。