Видна ли вставка, сделанная в транзакции, с помощью SELECT до ее подтверждения - PullRequest
3 голосов
/ 09 апреля 2010

Мне нужно подтверждение.

Клиент 1 вставляет строки в таблицу внутри транзакции.

Клиент 2 запрашивает эту таблицу с помощью SELECT. Если на этом уровне изоляции клиента установлено значение READ COMMITTED, можете ли вы подтвердить, что SELECT не будет возвращать строки, которые еще не зафиксированы Клиентом 1.

Спасибо

Ответы [ 3 ]

4 голосов
/ 09 апреля 2010

Зависит от уровня изоляции транзакции.Если уровень изоляции действительно «Read Committed», другие соединения не могут видеть строки, которые были вставлены другим клиентом в транзакцию, которая еще не была зафиксирована.

Некоторое чтение:

1 голос
/ 09 апреля 2010

Correct.

Ссылка MSDN для этого здесь , что (цитата) говорит:

Указывает, что операторы не могут читать данные, которые были изменены, но не совершенные другими транзакциями. это предотвращает грязное чтение. Данные могут быть изменено другими транзакциями между отдельные заявления в рамках текущая транзакция, в результате чего неповторимые чтения или фантомные данные. Этот параметр используется по умолчанию для SQL Server.

Оператор SELECT должен быть запущен в режиме READ UNCOMMITTED, чтобы прочитать данные, которые были изменены другим процессом, но еще не совершил транзакцию.

1 голос
/ 09 апреля 2010

Да, ваше утверждение верно. READ COMMITTED указывает, что операторы не могут читать данные, которые были изменены, но не зафиксированы другими транзакциями.

...