Уровень изоляции транзакций для SELECTs


Задается транзакция, запущенная в реляционной базе данных, запускающая серию выборок.

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

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

Если это зависит от транзакционной политики каждой СУБД, то какова политика Oracle?

2 4

2 ответа:

Ваше предположение верно, по крайней мере для Oracle.

Oracle гарантирует согласованность чтения, выполненного в данный момент. После того, как чтение инициировано, не имеет значения, изменяют ли другие транзакции выбранные данные - Oracle гарантирует, что данные-это то, что было в базе данных в начале чтения. Если он не может выполнить эту гарантию, вы получаете ошибку "Ora-01555 snapshot too old". Однако последующие выборки могут не получить такого же ответа.

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

Если вы просто ищете данные в данный момент времени, Oracle предоставляет запросы flashback.

Копирование и вставка ответа, данного в качестве комментария к вопросу:

Уровень изоляции по умолчанию в Oracle - " read committed "(вы" видите " изменения, зафиксированные другими транзакциями, даже если они были зафиксированы после запуска вашей транзакции). Oracle также позволяет установить уровень изоляции на " сериализуемый "(вы только" видите "изменения, которые были зафиксированы другими транзакциями во время запуска вашей транзакции) или" только для чтения "(например," сериализуемый", за исключением того, что он не позволяет Вставить, обновить или удалить). Все подробности см. В разделе Ссылка .