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 также заботится о фантомных чтениях?