пытаясь создать фантом в MySQL под уровнем изоляции REPEATABLE-READ - PullRequest
7 голосов
/ 23 марта 2012

Я пытаюсь продемонстрировать фантомное чтение в MySQL с помощью JDBC.Я понимаю, что при уровне изоляции REPEATABLE-READ фантомы должны быть возможны.Но я не могу этого допустить.Мои транзакции настроены следующим образом:

Транзакция 1:

querySetOne[0] = "use adventureworks";
querySetOne[1] = "select * from vendorcontact where ContactTypeID between 10 and 30";
querySetOne[2] = "select sleep(20)";
querySetOne[3] = "select * from vendorcontact where ContactTypeID between 10 and 30";
querySetOne[4] = "COMMIT";

Транзакция 2:

querySetTwo[0] = "use adventureworks";
querySetTwo[1] = "select sleep(2)";
querySetTwo[2] = "insert into vendorcontact values (105, 700, 20, NULL)";
querySetTwo[3] = "COMMIT";

У меня они есть в массивах, которые я используюметод Statement.execute () для выполнения каждой строки, и у меня для autocommit установлено значение false.

Почему запрос из querySetOne [1] и querySetOne [3] возвращает одинаковые результаты при уровне изоляции повторяемого чтения ??

Ответы [ 2 ]

4 голосов
/ 23 марта 2012

Стандарт SQL, по-видимому, указывает, что фантомные чтения возможны при повторяемой изоляции чтения, но не говорит, что они необходимы.

В частности, движок MySQL InnoDB поддерживает согласованные чтения вповторяемая изоляция чтения, что означает, что первое чтение в транзакции создает снимок, а повторное чтение позже в транзакции использует тот же моментальный снимок.

В документации MySQL говорится об повторяемой изоляции чтения:

Все непротиворечивые чтения в одной и той же транзакции считывают моментальный снимок, созданный при первом чтении.Это соглашение означает, что если вы выполняете несколько простых (неблокирующих) операторов SELECT в одной транзакции, эти операторы SELECT также согласуются друг с другом.

0 голосов
/ 23 марта 2012

Фантомы невозможны с REEATABLE READ. Призраки являются следствием READ COMMITTED. Это главное различие между RR и RC. Недавно я написал сообщение в блоге, объясняющее два уровня изоляции, поскольку они часто путаются: http://blog.9minutesnooze.com/repeatable-read-read-committed/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...