繁体   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