加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sqlserver多线程查询与更新

发布时间:2020-12-12 13:21:55 所属栏目:MsSql教程 来源:网络整理
导读:这是一个典型的“丢失更新”问题。通常的解决方式是提高隔离级别,或者为select加排他锁。但我推荐下面这种方式,可以在sql server默认的隔离级别和锁机制下解决问题。 begin tran--注意:事务中的第一句必须是updateupdate 表名 set id=id+1 where ...--获

这是一个典型的“丢失更新”问题。通常的解决方式是提高隔离级别,或者为select加排他锁。但我推荐下面这种方式,可以在sql server默认的隔离级别和锁机制下解决问题。

begin tran
--注意:事务中的第一句必须是update
update 表名 set id=id+1 where ...
--获取原来的id值
declare @id int;
select @id=id-1 from 表名 where ...
利用@id,进行相应操作
视情况commit tran或rollback tran


核心思路是调整语句顺序,将update放到事务最开始,利用其排他锁,阻塞其他并发事务,保证同一时间只有一个事务执行 。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读