-- [SQL-9-2-5-a] A 세션
-- A 세션
-- 1. ACC1의 잔액 5,000원으로 초기화
UPDATE startdbpg.ms_acc t1
SET bal_amt = 5000
WHERE t1.acc_no = 'ACC1';
-- 2. A 세션 명시적 트랜잭션 시작
BEGIN;
-- 4. ACC1 잔액 조회(5,000원)
SELECT t1.bal_amt FROM startdbpg.ms_acc t1
WHERE t1.acc_no = 'ACC1';
-- 6. ACC1에서 500원 출금
UPDATE startdbpg.ms_acc t1
SET bal_amt = bal_amt-500
WHERE t1.acc_no = 'ACC1';
-- 8. ACC1 잔액 조회(4,500원)
SELECT t1.bal_amt FROM startdbpg.ms_acc t1
WHERE t1.acc_no = 'ACC1';
-- 9. 변경된 데이터 반영
COMMIT;
SQL
복사
-- [SQL-9-2-5-a] B 세션
-- B 세션
-- 3. B 세션 명시적 트랜잭션 시작
BEGIN;
-- 5. ACC1 잔액 조회(5,000원)
SELECT t1.bal_amt FROM startdbpg.ms_acc t1
WHERE t1.acc_no = 'ACC1';
-- 7. ACC1에서 500원 출금
-- A 세션이 커밋할 때까지 대기에 빠짐
UPDATE startdbpg.ms_acc t1
SET bal_amt = bal_amt-500
WHERE t1.acc_no = 'ACC1';
-- 10. ACC1 잔액 조회(4,000원)
-- B 세션에서 이전에 조회한 잔액은 5,000원
-- B 세션에서 500원만 출금했는데 잔액이 4,000원
SELECT t1.bal_amt FROM startdbpg.ms_acc t1
WHERE t1.acc_no = 'ACC1';
-- 11. 변경된 데이터 반영
COMMIT;
SQL
복사
