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 に答える