2015-05-27 2 views
0

Я обновляю несколько записей в сессии 1 с открытой сделкой -установленных уровень изоляции транзакции повторяемые чтения дают врезным замкам

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

Как вы можете видеть, что фиксацию/откат транзакция не выдаются. Теперь я стараюсь читать записи из другой сессии сессии 2.

set transaction isolation level repeatable read 
select * from aa 

Теперь уровня изоляции - повторяемые чтения должны дать мне то же старое значение, которое было там до заявления обновления в сессии 1, которая должна быть гарри и не harry1. Пожалуйста, поправьте меня, если я ошибаюсь. Но когда я пытаюсь прочитать запись в сеансе 2, пока транзакция все еще открыта в сеансе 1, я получаю тупик. Скажите, кто-нибудь скажет мне, почему повторяемое чтение не работает и ведет себя как прочитанное.

ответ

1

REPEATABLE READ - это то же, что и READ COMMITTED, но, кроме того, блокировки доступа сохраняются в строках, считанных на время транзакции. Другими словами, любая строка, которая считывается, не может быть изменена другим соединением до тех пор, пока транзакция не совершит или откатится.

Таким образом, ваш запрос на сеанс 2 ожидает либо фиксации, либо отката в сеансе 1.

+0

Большое спасибо. Я понял это сейчас. С тех пор я пытался выяснить, что мне не хватает. – sam

Смежные вопросы