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

sql-server – 何时/什么锁在READ COMMITTED隔离级别中保留/释放

发布时间:2020-12-12 16:29:27 所属栏目:MsSql教程 来源:网络整理
导读:我试图了解SQL Server中的隔离/锁定. 我在READ COMMITTED隔离级别(默认)中有以下情况 我们有一张桌子. create table Transactions(Tid int,amt int)with some recordsinsert into Transactions values(1,100)insert into Transactions values(2,-50)insert in
我试图了解SQL Server中的隔离/锁定.

我在READ COMMITTED隔离级别(默认)中有以下情况

我们有一张桌子.

create table Transactions(Tid int,amt int)

with some records

insert into Transactions values(1,100)
insert into Transactions values(2,-50)
insert into Transactions values(3,100)
insert into Transactions values(4,-100)
insert into Transactions values(5,200)

现在从msdn我明白了

当选择被启动时,共享锁被采取,所以没有其他事务可以修改数据(避免脏读).文档还涉及行级别,页级别,表级锁定.我想到了以后的场景

Begin Transaction

select * from Transactions

/*
some buisness logic which takes 5 minutes

*/

Commit

我想要了解的是什么时间共享锁将被获取和哪个(行,页面,表).

只有当交易中的语句select *运行或者在完成COMMIT之前整个5分钟才能获取锁定.

解决方法

只有当从事务中选择*时才会获取锁定

你可以用下面的代码来检查它

打开一个sql会话并运行这个查询

Begin Transaction

select * from Transactions

 WAITFOR DELAY '00:05'
/*
some buisness logic which takes 5 minutes

*/

Commit

打开另一个sql会话并运行下面的查询

Begin Transaction
Update Transactions
Set = ...
where ....
commit

(编辑:李大同)

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

    推荐文章
      热点阅读