* SQL SERVER는 읽기, 쓰기 모두 Current mode.
  ORACLE은 읽기는 Consistent mode, 쓰기는 Current mode이다.

1. SQL SERVER
TX1                                                 TX2                                         
------------------------------------------------------------------------------------------------
-- 1.
BEGIN TRAN
UPDATE TEST SET AMT = AMT + 100 
WHERE NO = '2'
AND AMT = 1000
;

                                                    -- 2.
                                                    BEGIN TRAN
                                                    UPDATE TEST SET AMT = AMT + 200 
                                                    WHERE NO = '2'
                                                    AND AMT = 1100  -> Blocking후 TX1후 Commit되면 반영된다. 항상 Current mode로 읽고 쓴다. 1300
                                                    AND AMT = 1000  -> Blocking후 TX1후 Commit되면 이 시점에 이미 TX1에 의해 값이 변경되어 UPDATE 실패다. 1100
                                                    ;

-- 3.
COMMIT TRAN;

                                                    -- 4.
                                                    COMMIT TRAN;




2. ORACLE
TX1                                                 TX2                                         
------------------------------------------------------------------------------------------------
-- 1. 
UPDATE ACC_01 SET ACC_REMAIN = ACC_REMAIN + 100
WHERE ACC_NO = 7369
AND ACC_REMAIN = 1000
;

                                                    -- 2.
                                                    UPDATE ACC_01 SET ACC_REMAIN = ACC_REMAIN + 200
                                                    WHERE ACC_NO = 7369
                                                    AND ACC_REMAIN = 1100   -> Blocking되지 않는다. Consistent mode로 읽기 때문에 읽기시에 조건에 맞는 레코드가 없다. 1100
                                                    AND ACC_REMAIN = 1000   -> Blocking후 TX1후 Commit되면 이 시점에 이미 TX1에 의해 값이 변경되어 UPDATE 실패다. 1100
                                                    ;

-- 3.
COMMIT;

                                                    -- 4.
                                                    COMMIT;


 

* 위 예제를 변경해서
TX1에서 신규 Record를 INSERT하고, 그 해당 Record를 계속 UPDATE
TX2에서 기존에 있던 다른 Record를 UPDATE하는 경우에도 결과는 마찬가지로 같다.

즉, SQL SERVER는 TX2에서 여전히 Blocking이 걸리고, ORACLE은 Blocking없이 UPDATE처리 된다.