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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读