문제
다음 트랜잭션 제어 명령어들을 순서대로 실행했을 때의 최종 결과는?
SQLINSERT INTO logs VALUES (100, 'START'); SAVEPOINT sp_a; INSERT INTO logs VALUES (200, 'PROCESS'); SAVEPOINT sp_b; INSERT INTO logs VALUES (300, 'END'); ROLLBACK TO sp_a; INSERT INTO logs VALUES (400, 'RESTART'); COMMIT;
① logs 테이블에 (100,'START'), (400,'RESTART') 2건 ② logs 테이블에 (100,'START'), (200,'PROCESS'), (400,'RESTART') 3건 ③ logs 테이블에 (400,'RESTART') 1건만 존재 ④ logs 테이블이 비어있음 (0건)
정답
1번
해설
SAVEPOINT sp_a 설정 후 추가된 (200,'PROCESS')와 (300,'END')는 ROLLBACK TO sp_a로 취소됩니다. 따라서 sp_a 시점인 (100,'START') 상태로 돌아가고, 그 후 (400,'RESTART')가 추가되어 COMMIT으로 확정됩니다.