Будут ли транзакции мешать другому коду читать противоречивые данные? - PullRequest
2 голосов
/ 22 августа 2011

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

Если так, то как люди обычно справляются с этим?

Ответы [ 3 ]

7 голосов
/ 22 августа 2011

Это зависит от УРОВНЯ ИЗОЛЯЦИИ запроса на чтение, а не от транзакции.Это может быть установлено централизованно на соединении или указано в подсказке SELECT.

См .: Сторона соединения: http://msdn.microsoft.com/en-us/library/system.data.isolationlevel.aspx

Сторона базы данных: http://msdn.microsoft.com/en-us/library/ms173763.aspx

1 голос
/ 22 августа 2011

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

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

0 голосов
/ 22 августа 2011

Расширяя ответ Алиостада:

По умолчанию другие процессы чтения не будут считывать изменяемые данные (незафиксированные, то есть «грязные чтения»). Это относится ко всем клиентам и драйверам

Необходимо сознательно переопределить это значение по умолчанию с помощью подсказки NOLOCK или изменения уровня изоляции, чтобы разрешить «грязное чтение».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...