2015-05-27 39 views
0

我在会议1更新一些记录有打开的事务 -集事务隔离级别重复读是给死锁

begin transaction 
update aa 
set name = 'harry1' 
where name = 'harry' 

正如你可以看到,提交/回滚事务没有发出。现在,我尝试从另一个会话的会话读取记录2

set transaction isolation level repeatable read 
select * from aa 

现在隔离级别 - 重复读应该给我相同的旧值在那里举行会议1 update语句应该是哈利,而不是harry1之前。如果我错了,请纠正我。 但是,当我尝试在会话2中读取记录而事务仍然在会话1中打开时,我得到了死锁......有人可以告诉我为什么可重复读取不起作用,并且表现得像读取已提交。

回答

1

REPEATABLE READ与READ COMMITTED相同,但共享锁保留在事务处理期间读取的行上。换句话说,在事务提交或回滚之前,读取的任何行都不能被其他连接修改。

因此,您对会话2的查询正在等待会话1的提交或回滚。

+0

非常感谢。我现在终于明白了。我试图弄清楚我自己错过了什么。 – sam