#sql #database #isolation-level
#sql #База данных #уровень изоляции
Вопрос:
Повторяемое чтение определяется как
более высокий уровень изоляции, который в дополнение к гарантиям уровня фиксации чтения, также гарантирует, что любые прочитанные данные не могут измениться, если транзакция снова прочитает те же данные, она найдет ранее прочитанные данные на месте, неизменными и доступными для чтения.
Что кажется очень похожим на изоляцию моментального снимка.
Чем повторяемое чтение отличается от уровня изоляции моментального снимка?
Ответ №1:
«Моментальный снимок» гарантирует, что все запросы в транзакции будут видеть данные такими, какими они были в начале транзакции.
«Повторяемое чтение» гарантирует только то, что если несколько запросов в транзакции прочитают одни и те же строки, то они будут видеть одни и те же данные каждый раз. (Таким образом, разные строки могут быть сняты в разное время, в зависимости от того, когда транзакция впервые извлекает их. И если будут вставлены новые строки, более поздний запрос может их обнаружить.)
Комментарии:
1. Из cockroachlabs.com/blog/consistency-model Я понимаю, что повторяемое чтение допускает фантомы, означающие, что «если транзакция дважды выполняет запрос, запрашивающий строки, соответствующие условию, второе выполнение может вернуть больше строк, чем первое. Например, что-то вроде select * from orders где значение > 1000 может возвращать заказы (a, b, c) в первый раз и (a, b, c, d) во второй раз «. Кажется, что несколько таблиц не требуются.
2. @Javier: Спасибо за ваш комментарий! Я вижу, как мое примечание в скобках могло сбить с толку. Сейчас я это скорректировал и включил ваш пример, который очень полезен. 🙂
Ответ №2:
Изоляция моментального снимка называется «повторяемым чтением» в PostgreSQL и в MySQL. В Oracle DB это называется «serializable». IBM DB2 использует «повторяемое чтение» для обозначения сериализуемости.
В стандарте SQL отсутствует концепция изоляции моментального снимка, которая была определена годы спустя, это причина путаницы в именовании.
В результате никто на самом деле не знает, что означает повторяемое чтение. Но разумно предположить, что это одно и то же.