<TX1> | <TX2> | |
---|---|---|
T1 | SELECT 잔고 INTO :balance FROM 계좌 WHERE 계좌번호 = 123; --> 잔고 : 55,000원 | |
T2 | UPDATE 계좌 SET 잔고 = 잔고 - 50000 WHERE 계좌번호 = 123; --> 잔고 : 5,000 | |
T3 | COMMIT; | |
T4 | UPDATE 계좌 SET 잔고 = 잔고 - 10000 WHERE 계좌번호 = 123 AND 잔고 >= 10000; --> 잔고가 부족하다는 메시지를 받게 됨 | |
T5 | IF sql%rowcount = 0 THEN alert('잔고가 부족합니다'); END IF; | |
T6 | COMMIT; |
<그림 3-2-1> Non-Repeatable Read
<TX1> | <TX2> | |
---|---|---|
T1 | INSERT INTO 지역별고객 SELECT 지역, COUNT(*) FROM 고객 GROUP BY 지역; | |
T2 | INSERT INTO 고객(고객번호, 이름, 지역, 연령대, ...) VALUES (:a, :b, :c, :d, ...); | |
T3 | COMMIT; | |
T4 | INSERT INTO 연령대별고객 SELECT 연령대, COUNT(*) FROM 고객 GROUP BY 연령대; | |
T5 | COMMIT; |
레벨 | Dirty Read | Non-Repeatable Read | Phantom Read |
---|---|---|---|
Read Uncommitted | 가능 | 가능 | 가능 |
Read Committed | 불가능 | 가능 | 가능 |
Repeatable Read | 불가능 | 불가능 | 가능 |
Serializable Read | 불가능 | 불가능 | 불가능 |
* SQL Server
set transaction isolation level read serializable;
* ORACLE
alter session set isolation_level = serializable;
- 강좌 URL : http://www.gurubee.net/lecture/2397
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.