SQLServer并发问题,先SELECT后UPDATE,避免并发脏读情况解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLServer并发问题,先SELECT后UPDATE,避免并发脏读情况解决相关的知识,希望对你有一定的参考价值。

在SQL Server中,需要对数据操作进行先SELECT 之后UPDATE,对于这样的操作,如果出现高并发,可能导致脏读情况的发生。不能保证数据的同步。

解决方案是在事物中对表进行加更新锁:

事务一:

begin tran 
declare @count int =0
select @count=[Count] from tb_name WITH(UPDLOCK,HOLDLOCK) where id=1
select @count as count1
waitfor delay 00:00:30
update tb_name set [Count]=@count+1 where id=1
commit tran 
 
select * from tb_name

事务二:

begin tran
declare @count int =0
select @count=[Count] from tb_name WITH(UPDLOCK,HOLDLOCK) where  id=1
select @count as count2
update tb_name set [Count]=@count+1 where id=1
commit tran 
 
select * from tb_name

 

以上是关于SQLServer并发问题,先SELECT后UPDATE,避免并发脏读情况解决的主要内容,如果未能解决你的问题,请参考以下文章

MSSqlserver的锁模式介绍

sqlserver 存储过程

关于sqlserver存储过程事务锁的问题

【网络协议笔记】第四层:传输层(Transport)以及UPD协议简介

sqlserver like '%' 性能问题

upd 2020.10.31