Ниже приведено утверждение, написанное из Статьи изоляции Википедии о повторяемых читах
. В этом уровне изоляции
на этом уровне изоляции. Реализация DBMS-контроля на основе блокировки сохраняет замки для чтения и записи (приобретенные на выбранные данные Несомненно до конца транзакции. Однако диапазон-замки не управляются, поэтому может возникнуть фантомное явление, которое может произойти (см. Ниже).
Мой вопрос здесь, когда делает транзакцию начинается и заканчивается соответственно.
Если мы возьмем пример не повторяемых чтений с повторяемым уровнем изоляции считывания по той же ссылке, согласно моему пониманию Trnsaction 1
Когда первый запрос уволен I.E Выберите * от пользователей, где ID = 1.
СУБД будет держать блокировку на таблице пользователей, и если транзакция не получится.
Здесь к концу Я имею в виду, когда соединение получает Rollibleback или обязано не на завершение , выберите * от пользователей, где ID = 1
. До того времени
Транзакция 2 будет ждать правильно?
Вопрос 2: - Теперь, если мы рассмотрим уровень изоляции и поведение их, как указано ниже (по той же ссылке)
Isolation level Dirty reads Non-repeatable Phantoms
Read Uncommitted may occur may occur may occur
Read Committed - may occur may occur
Repeatable Read - may occur -
Serializable - - -
, согласно моему пониманию, наиболее надежным является сериализация, затем повторяется, а затем прочитано Но все же я видел, используя прочитанные. Это потому, что
производительности сериализма и повторяемого чтения плохой по сравнению с прочитанным преданным, потому что в сериализации он будет последовательным и в случае
транзакции должен ждать выпуска блокировки другой транзакцией. верно? Итак, чтобы получить лучшее из всех трех, мы можем использовать изоляцию
Уровень как прочитанный с выбрать для обновления
(для достижения повторяемого чтения). Не уверен, как мы можем добиться фантомка читать, если мы хотим, в случае прочитанного
Уровень изоляции?