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

前端之家收集整理的这篇文章主要介绍了sql-server – 何时/什么锁在READ COMMITTED隔离级别中保留/释放前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图了解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

猜你在找的MsSQL相关文章