MySQL повторяемое чтение и потерянные обновления / фантомные чтения

Я пробовал это с MySQL Server 5.5:

1) гарантировано, что уровень изоляции транзакции - repeatable_read

2) запустил shell-1, запустил в нем транзакцию, затем прочитал значение через select

3) запустил shell-2, запустил в нем транзакцию, затем прочитал то же значение через select

4) в shell-1 обновили значение до значения +1 и зафиксировали

5) в shell-2 обновили значение до значения +1 и зафиксировали

Значение потеряло одно из своих обновлений и было увеличено только на 1.

Теперь, насколько я понимаю, RR использует общие блокировки чтения и эксклюзивные блокировки записи, что означает, что в # 4 и # 5 выше транзакции должны были быть заблокированы, но этого не произошло.

Так что либо мое понимание RR неверно, либо MySQL реализует RR другим способом. Так что же это?

РЕДАКТИРОВАТЬ: в аналогичном эксперименте также подтвердил, что транзакция RR (t1) не видит строк, вставленных в ту же таблицу другой транзакцией RR (t2), если она делает другой выбор в этой таблице даже после того, как t2 зафиксировал и перед t1 фиксирует , (Вот ссылка на этот эксперимент:http://www.databasejournal.com/features/mysql/article.php/3393161/MySQL-Transactions-Part-II---Transaction-Isolation-Levels.htm)

Означает ли это, что MySQL RR также заботится о фантомных чтениях?

Ответы на вопрос(1)

Ваш ответ на вопрос