2012-03-17 22 views
1

我想知道在以下情況下我是否確實需要事務/鎖。我可以進行3個操作可能在其中任意數量的併發(即我可以有兩個任務1運行和三個任務2運行):我是否需要在SQL Server中的此併發更新方案的事務/鎖

任務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; 

我應該如何實施上述被肯定,我永遠不會科爾upt table_2的字段counter

非常感謝!

回答

1

的幾點:

  • 在你需要附上每個任務的兩個語句中的交易的情況。
  • 我認爲你需要可序列化的事務隔離級別。少一點都不行。例如,使用「可重複讀取」任務1可能會將table_2.counter設置爲陳舊值。
  • 您需要在table_2之前始終訪問table_1。這將確保一致的鎖定順序防止死鎖。
-1

對於任務2,3,您可以使用TRIGGER。它以適當的方式鎖定你的表格。爲Task 1你應該在你的交易使用XLOCK爲行鎖

+0

我不會說觸發器根本就沒有任何鎖定。我不認爲這個答案是正確的。 – usr 2012-03-17 13:10:53