根据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节?
答案 0 :(得分:0)
两者,他们不是在谈论同一个锁。
写操作是指单个行及其锁定。范围操作指的是行的集合及其锁(通常是整个表上的锁)。
即声明
update Employee set category = "permanent" where id =1
将在语句的持续时间内获取表锁,并在事务持续期间锁定更新的行。