簡體   English   中英

我是否需要事務/鎖用於SQL Server中的此並發更新方案

[英]Do I need transactions/locks for this concurrent update scenario in SQL Server

我想知道在以下情況下我是否真的需要事務/鎖。 我可以執行3個操作,這些操作可以同時執行任意數量(即,我可以同時運行兩個任務1和三個任務2):

任務1:

select distinct count(some_id) as my_counter from table_1;
update table_2 set counter = my_counter;

任務2:

insert into table_1 ...;
update table_2 set counter = counter + 1;

任務3:

delete from table_1 where id = ...;
update table_2 set counter = counter - 1;

我應該如何實現上面的內容以確保我不會破壞table_2的字段counter

非常感謝你!

幾點:

  • 無論如何,您都需要將每個任務的兩個語句包含在事務中。
  • 我認為您需要可序列化的事務隔離級別。 少做不到。 例如,使用“重復讀取”任務1可能會將table_2.counter設置為陳舊值。
  • 您需要始終在table_2之前訪問table_1。 這將確保一致的鎖順序,防止死鎖。

您可以將TRIGGER用於任務2,3。 它以適當的方式鎖定表。 對於Task 1您應該在事務中使用XLOCK進行行鎖定

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM