Sql server 在SQL Server中,此并发更新方案是否需要事务/锁
我想知道在下面的场景中我是否真的需要事务/锁。我可以执行3个操作,这些操作可能在任意数量的操作中同时进行(即,我可以运行两个Task 1和三个Task 2): 任务1:Sql server 在SQL Server中,此并发更新方案是否需要事务/锁,sql-server,concurrency,transactions,locks,Sql Server,Concurrency,Transactions,Locks,我想知道在下面的场景中我是否真的需要事务/锁。我可以执行3个操作,这些操作可能在任意数量的操作中同时进行(即,我可以运行两个Task 1和三个Task 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 = count
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;
我应该如何实现上述功能以确保我永远不会损坏表2的字段计数器
多谢各位 您可以对任务2,3使用
触发器
。它以适当的方式锁定您的表。对于任务1
,您应该在事务中使用XLOCK
进行行锁定以下几点:
- 在任何情况下,都需要在事务中包含每个任务的两条语句
- 我认为您需要可序列化事务隔离级别。少一点都不行。例如,使用“可重复读取”任务1可能会将表2.counter设置为过时值
- 您需要始终在访问表_2之前访问表_1。这将确保一致的锁顺序,防止死锁