Разница между фантомным чтением и неповторяемым чтением в MySQL 8.0 - PullRequest
0 голосов
/ 11 июля 2019

Я использую версию mysql 8.0 и разбираюсь в понятиях уровней изоляции rdbms.Делая небольшие примеры в MySQL, в чем разница между неповторяемым чтением и фантомным чтением.В большинстве ответов в Google теоретически объясняется, что повторяющийся уровень изоляции при чтении предотвращает проблему неповторяемого чтения, т. Е. Любая транзакция, которая обнаружила какие-либо значения в другой транзакции, не изменила бы состояние 1-й транзакции, но другая транзакция может вставить новые значения.чтение может происходить в режиме повторяемого чтения) Сериализуемый уровень изоляции предотвращает проблему фантомного чтения. Вот мой подход и очень запутался.

Предположим, что весь уровень транзакций на уровне сеанса повторяется и все таблицы создаются в движке INNODB.

сеанс: -1 стартовая транзакция;выберите * из demo.employee;// предположим, что у него есть три записи с идентификаторами 1,2 и 3

Сессия 2: запуск транзакции select * from demo.employee // То же значение, которое было в сеансе1

Сессия: -1 обновлениенекоторое значение с id = 1, и теперь при запуске запроса на выборку мы можем видеть обновленное значение

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

Может ли кто-нибудь помочь мне понять это.

...