Microsoft SQL Server
팬텀 읽기
수색…
소개
데이터베이스 시스템에서 격리는 트랜잭션 무결성이 다른 사용자 및 시스템에 표시되는 방법을 결정하므로 한 작업에서 변경 한 사항을 다른 사용자가 볼 수있는 방법 /시기를 정의합니다. 유령 읽기는 데이터를 데이터베이스로 전송하지 않을 때 발생할 수 있습니다.
비고
MSDN 에서 다양한 ISOLATION LEVEL
을 읽을 수 있습니다.
격리 수준 읽기 미확인
샘플 데이터베이스에서 샘플 테이블 만들기
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을 건드리지 마십시오 )하면이 경우 DB에 행을 삽입하지만 변경 사항을 커밋하지 마십시오 .
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
두 번째 편집기에서 쿼리를 실행하면 레코드가 사라지는 것을 볼 수 있습니다 (팬텀 읽기). 이것은 두 번째 트랜잭션에서 모든 행과 커밋되지 않은 트랜잭션을 가져 오기 때문에 발생합니다.
이것은 격리 수준을 다음과 같이 변경하면 발생합니다.
set transaction isolation level READ UNCOMMITTED
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow