Поиск…


Вступление

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

замечания

Вы можете прочитать различные ISOLATION LEVEL на MSDN

Уровень изоляции READ UNCOMMITTED

Создать образец таблицы в примерной базе данных

CREATE TABLE [dbo].[Table_1](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [title] [varchar](50) NULL,
 CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

Теперь откройте первый редактор запросов (в базе данных), вставьте приведенный ниже код и выполните ( не трогайте --rollback ), в этом случае вы вставляете строку в БД, но не совершаете изменений.

begin tran

INSERT INTO Table_1 values('Title 1')

SELECT * FROM [Test].[dbo].[Table_1]

--rollback

Теперь откройте второй редактор запросов (в базе данных), вставьте код ниже и выполните

begin tran

set transaction isolation level READ UNCOMMITTED

SELECT * FROM [Test].[dbo].[Table_1]

Вы можете заметить, что во втором редакторе вы можете увидеть только что созданную строку (но не зафиксированную) из первой транзакции. На первом редакторе выполните откат (выберите слово откат и выполните).

-- Rollback the first transaction
rollback

Выполните запрос во втором редакторе, и вы увидите, что запись исчезла (фантомное чтение), это происходит из-за того, что вы сообщаете второй транзакции, чтобы получить все строки, а также uncommitteds.

Это происходит, когда вы меняете уровень изоляции с помощью

set transaction isolation level READ UNCOMMITTED


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow