在Read committed Isolation级别下更新?

时间:2014-01-25 12:14:19

标签: java sql-server transactions isolation-level

根据read committed isolation level on wiki

读取已提交

在此隔离级别中,基于锁的并发控制DBMS实现保持写锁(在选定数据上获取),直到事务结束, 但是一旦执行SELECT操作就会释放读锁定

按照上面的陈述,看起来,无论何时任何更新声明都是超越整个表(codesnippet 1)或选定范围(codesnippet 2), 读提交的隔离级别将保持锁定直到提交

codesnippet 1
begin tran
update Employee set category = "permanent" 
...
end tran // lock will be released here

codesnippet 2
begin tran
update Employee set category = "permanent" where id =1 
...
end tran // lock will be released here

第2节: -

但是,对于同一链接上的Isolation Levels vs Lock Duration部分看起来像update on selected range的情况,一旦执行更新,将导致锁被重新锁定。它不会 等到交易成功

begin tran
update Employee set category = "permanent" where id =1 
// lock will be released here
........
end tran 

我的问题是第2节正确还是第1节?

1 个答案:

答案 0 :(得分:0)

两者,他们不是在谈论同一个锁。

写操作是指单个行及其锁定。范围操作指的是行的集合及其锁(通常是整个表上的锁)。

即声明

update Employee set category = "permanent" where id =1 

将在语句的持续时间内获取表锁,并在事务持续期间锁定更新的行。