Уровни изолированности транкзакций(ACID)
Хочу подробно разобраться в уровнях изолированности транкзакций. Пока что у меня получилось разобраться только в Read uncommitted и read committed.
Пример: Есть массив например 1 2 3 4 5 Есть две параллельные транкзакций Одна скажем делает +1 Вторая умножает на 2
Массив может получится 4 5 8 9 12
При read uncommitted транкзакции будут выполняться кто быстрее и получится не предсказуемое поведение, не то что нам нужно
Read committed фиксирует изменения и только после этого другая транкзакция видит эти изменения и вносит свои, она не видит записей которые не помечены committed.
Массив будет 4 6 8 10 12
А теперь прошу вас объясните пожалуйста как работает repeatable read?
И насчет serializible, я понимаю что он делает lock записи и прочее, работает медленнее, но как происходит фантомное чтение? Можно пример?
Ответы (1 шт):
Итак, мне очень помогла эта статья: http://aboutmysqldb.blogspot.com/2013/?view=sidebar&_escaped_fragment_&m=1
Неповторяющиеся чтения - это проблема которая возникает у двух параллельных транкзакций.
Как видно на рисунке транкзакция 2 читает данные в один промежуток времени и во второй, но между этими 2 интервалами происходит update транкзакции 1 и когда транкзакция 2 повторно прочитает данные они будут неповторяющимися.
Фантомное чтение - это проблема где есть 2 параллельные транкзакции и у одной из них из ниоткуда появляется новые данные.
Как и в случае выше, транкзакция 2 делает insert в табличку и транкзакция 1 видит эту табличку и может внести изменения которые она применяла к другим записям во время своего выполнения.

