我有一个交易和交易表,其中交易表有一个聚合列,'TotalSales',这只是每笔交易的交易数量。
使用以下命令,交易行计数和总销售额是否有可能不同步(不包括删除行)?默认隔离级别是否适用于此?我们有很多用户可能同时进行购买,所以我试图找出处理这个问题的最佳方法。
BEGIN TRANSACTION
INSERT INTO [transaction] ...
UPDATE deal
SET TotalSales = (select count(*) from [transaction] where dealid = @dealId)
WHERE dealId = @dealId
COMMIT TRANSACTION
答案 0 :(得分:1)
我对这些事情的偏好是使用视图:
CREATE VIEW vw_sales AS
AS
SELECT t.dealid,
COUNT(*) AS total_sales
FROM TRANSACTION t
GROUP BY t.dealid
保持值同步不那么麻烦,不存储冗余数据......
它同样容易受到隔离级别问题的影响 - 默认是读取已提交的数据。读取总销售额的未提交数据将为Bad(tm)。