2

我有一个交易和交易表,其中交易表有一个聚合列“TotalSales”,它只是每个交易的交易计数。

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

BEGIN TRANSACTION
INSERT INTO [transaction] ... 

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

1 回答 1

1

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

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

保持价值同步的麻烦更少,不存储冗余数据......

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

于 2010-08-06T14:29:50.850 回答