Pull to refresh

Comments 6

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

Фантомное чтение возникает, только когда добавляются строки, попадающие под условие выборки. Дело в том, что такие строки нельзя заранее заблокировать, отсюда и разница между двумя аномалиями.

Сошлюсь на стандарт:

P3 (“Phantom”): SQL-transaction T1 reads the set of rows N that satisfy some <search condition>. SQL-transaction T2 then executes SQL-statements that generate one or more rows that satisfy the <search condition> used by SQL-transaction T1. If SQL-transaction T1 then repeats the initial read with the same <search condition>, it obtains a different collection of rows.

А удаление - это случай неповторяющегося чтения:

P2 (“Non-repeatable read”): SQL-transaction T1 reads a row. SQL-transaction T2 then modifies or deletes that row and performs a COMMIT. If T1 then attempts to reread the row, it may receive the modified value or discover that the row has been deleted.

Благодарю за комментарий) статью поправил

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

Вопрос - а почему феномены «Неповторяющееся чтение» и «Фантом» разделены? Ведь по сути в случае добавления строк также возникает «Неповторяющееся чтение»?

При "Фантомном чтении" появляются новые строки, которых раньше не было. А при "Неповторяющемся чтении" изменяются существующие строки. Думаю поэтому эти два феномена и разделены.

Ну да, хотя по сути и там, и там чтение не повторилось. Избыточность? И можно ли назвать удаление - "изменением"?

Sign up to leave a comment.

Articles