READ UNCOMMITTED

T1으로 인해 변경된 내용을 커밋과 롤백 여부에 상관 없이
T2에서 읽을 수 있다.

READ UNCOMMITTED

사용자A

BEGIN

사용자B

디스크 (데이터 파일)

메모리 (버퍼)

메모리 (UNDO 로그)

emp_no first_name
49999 Francesca

READ UNCOMMITTED

사용자A

BEGIN

사용자B

INSERT(Lara)

디스크 (데이터 파일)

메모리 (버퍼)

메모리 (UNDO 로그)

emp_no first_name
49999 Francesca
50000 Lara

READ UNCOMMITTED

사용자A

BEGIN

사용자B

INSERT(Lara)

SELECT
WHERE emp_no=50000

디스크 (데이터 파일)

메모리 (버퍼)

메모리 (UNDO 로그)

Lara

emp_no first_name
49999 Francesca
50000 Lara

READ UNCOMMITTED

사용자A

BEGIN

사용자B

INSERT(Lara)

SELECT
WHERE emp_no=50000

COMMIT(Lara)

디스크 (데이터 파일)

메모리 (버퍼)

메모리 (UNDO 로그)

emp_no first_name
49999 Francesca
50000 Lara

READ UNCOMMITTED

Dirty Read

사용자A

BEGIN

사용자B

SELECT
WHERE emp_no=50000

INSERT(Lara)

ROLLBACK

디스크 (데이터 파일)

메모리 (버퍼)

메모리 (UNDO 로그)

Lara

emp_no first_name
49999 Francesca

READ COMMITTED

T1으로 변경된 내용을 커밋되기 전까지 T2에서 조회할 수 없다.

READ COMMITTED

사용자A

BEGIN

사용자B

디스크 (데이터 파일)

메모리 (버퍼)

메모리 (UNDO 로그)

emp_no first_name
49999 Francesca
50000 Lara

READ COMMITTED

사용자A

BEGIN

UPDATE
SET first_name='Toto'

사용자B

디스크 (데이터 파일)

메모리 (버퍼)

emp_no first_name
50000 Lara

메모리 (UNDO 로그)

emp_no first_name
50000 Toto
emp_no first_name
49999 Francesca
50000 Lara

READ COMMITTED

사용자A

디스크 (데이터 파일)

메모리 (버퍼)

emp_no first_name
50000 Lara

BEGIN

UPDATE
SET first_name='Toto'

사용자B

SELECT
WHERE emp_no=50000

메모리 (UNDO 로그)

emp_no first_name
50000 Toto
emp_no first_name
49999 Francesca
50000 Lara

Lara

READ COMMITTED

사용자A

BEGIN

UPDATE
SET first_name='Toto'

COMMIT(Toto)

사용자B

SELECT
WHERE emp_no=50000

디스크 (데이터 파일)

메모리 (버퍼)

emp_no first_name
50000 Lara

메모리 (UNDO 로그)

emp_no first_name
49999 Francesca
50000 Toto

READ COMMITTED

사용자A

BEGIN

UPDATE
SET first_name='Toto'

COMMIT(Toto)

사용자B

SELECT
WHERE emp_no=50000

디스크 (데이터 파일)

메모리 (버퍼)

메모리 (UNDO 로그)

emp_no first_name
49999 Francesca
50000 Toto

사용자A

BEGIN

사용자B

SELECT
WHERE first_name='Toto'

READ COMMITTED

NON-REPEATABLE READ

디스크 (데이터 파일)

메모리 (버퍼)

메모리 (UNDO 로그)

emp_no first_name
49999 Francesca
50000 Lara

사용자A

BEGIN

사용자B

BEGIN

UPDATE
SET first_name='Toto'

SELECT
WHERE first_name='Toto'

READ COMMITTED

NON-REPEATABLE READ

디스크 (데이터 파일)

메모리 (버퍼)

emp_no first_name
50000 Lara

메모리 (UNDO 로그)

emp_no first_name
50000 Toto
emp_no first_name
49999 Francesca
50000 Lara

사용자A

BEGIN

사용자B

BEGIN

UPDATE
SET first_name='Toto'

SELECT
WHERE first_name='Toto'

READ COMMITTED

NON-REPEATABLE READ

디스크 (데이터 파일)

메모리 (버퍼)

emp_no first_name
50000 Lara

메모리 (UNDO 로그)

emp_no first_name
50000 Toto
emp_no first_name
49999 Francesca
50000 Lara

SELECT
WHERE first_name='Toto'

사용자A

BEGIN

사용자B

BEGIN

UPDATE
SET first_name='Toto'

SELECT
WHERE first_name='Toto'

READ COMMITTED

NON-REPEATABLE READ

디스크 (데이터 파일)

메모리 (버퍼)

메모리 (UNDO 로그)

emp_no first_name
49999 Francesca
50000 Toto

COMMIT(Toto)

SELECT
WHERE first_name='Toto'

사용자A

BEGIN

사용자B

BEGIN

UPDATE
SET first_name='Toto'

SELECT
WHERE first_name='Toto'

SELECT
WHERE first_name='Toto'

COMMIT(Toto)

READ COMMITTED

NON-REPEATABLE READ

디스크 (데이터 파일)

메모리 (버퍼)

메모리 (UNDO 로그)

emp_no first_name
49999 Francesca
50000 Toto

Toto

SELECT
WHERE first_name='Toto'

사용자A

BEGIN

사용자B

BEGIN

UPDATE
SET first_name='Toto'

SELECT
WHERE emp_no=50000

SELECT
WHERE emp_np=50000

COMMIT(Toto)

READ COMMITTED

NON-REPEATABLE READ

디스크 (데이터 파일)

메모리 (버퍼)

메모리 (UNDO 로그)

emp_no first_name
49999 Francesca
50000 Toto

Lara

SELECT
WHERE emp_np=50000

Lara

Toto

REPEATABLE READ

트랜잭션마다 트랜잭션 ID를 부여하여
현 ID보다 작은 ID에서 변경한 것만 읽게 한다.   

REPEATABLE READ

사용자A

사용자B

SELECT
WHERE emp_no=50000

TRX_ID emp_no first_name
6 49999 Francesca
6 50000 Lara

BEGIN(TRX_ID: 10)

디스크 (데이터 파일)

메모리 (버퍼)

메모리 (UNDO 로그)

Lara

REPEATABLE READ

사용자A

사용자B

SELECT
WHERE emp_no=50000

BEGIN(TRX_ID: 10)

UPDATE
SET first_name='Toto'

BEGIN(TRX_ID: 12)

TRX_ID emp_no first_name
6 50000 Lara
TRX_ID emp_no first_name
6 49999 Francesca
6 50000 Lara

디스크 (데이터 파일)

메모리 (버퍼)

메모리 (UNDO 로그)

TRX_ID emp_no first_name
12 50000 Toto

Lara

REPEATABLE READ

사용자A

사용자B

SELECT
WHERE emp_no=50000

BEGIN(TRX_ID: 10)

UPDATE
SET first_name='Toto'

BEGIN(TRX_ID: 12)

TRX_ID emp_no first_name
6 50000 Lara

COMMIT(TRX_ID: 12)

디스크 (데이터 파일)

메모리 (버퍼)

메모리 (UNDO 로그)

TRX_ID emp_no first_name
6 49999 Francesca
12 50000 Toto

Lara

REPEATABLE READ

사용자A

사용자B

SELECT
WHERE emp_no=50000

BEGIN(TRX_ID: 10)

UPDATE
SET first_name='Toto'

BEGIN(TRX_ID: 12)

COMMIT(TRX_ID: 12)

SELECT
WHERE emp_no=50000

TRX_ID emp_no first_name
6 50000 Lara

디스크 (데이터 파일)

메모리 (버퍼)

메모리 (UNDO 로그)

TRX_ID emp_no first_name
6 49999 Francesca
12 50000 Toto

Lara

Lara

REPEATABLE READ

사용자A

사용자B

SELECT
WHERE emp_no=50000

BEGIN(TRX_ID: 10)

UPDATE
SET first_name='Toto'

BEGIN(TRX_ID: 12)

COMMIT(TRX_ID: 12)

SELECT
WHERE emp_no=50000

TRX_ID emp_no first_name
6 50000 Lara

디스크 (데이터 파일)

메모리 (버퍼)

메모리 (UNDO 로그)

TRX_ID emp_no first_name
6 49999 Francesca
12 50000 Toto

Lara

Lara

SELECT
WHERE emp_no=50000

Lara

사용자A

사용자B

SELECT
WHERE emp_no>=50000
FOR UPDATE

BEGIN(TRX_ID: 10)

Lara

REPEATABLE READ

PHANTOM READ

TRX_ID emp_no first_name
6 49999 Francesca
6 50000 Lara

디스크 (데이터 파일)

메모리 (버퍼)

메모리 (UNDO 로그)

REPEATABLE READ

PHANTOM READ

사용자A

사용자B

BEGIN(TRX_ID: 10)

Lara

TRX_ID emp_no first_name
6 49999 Francesca
6 50000 Lara
12 50001 Georgi

INSERT(Georgi)

BEGIN(TRX_ID: 12)

COMMIT(TRX_ID: 12)

SELECT
WHERE emp_no>=50000
FOR UPDATE

디스크 (데이터 파일)

메모리 (버퍼)

메모리 (UNDO 로그)

사용자A

사용자B

BEGIN(TRX_ID: 10)

Lara

INSERT(Georgi)

BEGIN(TRX_ID: 12)

COMMIT(TRX_ID: 12)

REPEATABLE READ

PHANTOM READ

SELECT
WHERE emp_no>=50000
FOR UPDATE

SELECT
WHERE emp_no>=50000
FOR UPDATE

Lara
Georgi

TRX_ID emp_no first_name
6 49999 Francesca
6 50000 Lara
12 50001 Georgi

디스크 (데이터 파일)

메모리 (버퍼)

메모리 (UNDO 로그)

Made with Slides.com