微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/mssql/82367.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐