문제
아래 SQL에서 ROLLBACK TO SAVEPOINT SQL1 실행 시 오류가 발생한 뒤, 같은 세션에서 계속해서 SELECT * FROM TABLE50을 수행한다고 할 때 결과 행 수로 가장 적절한 것은?
SQLINSERT INTO TABLE50 VALUES(1); INSERT INTO TABLE50 VALUES(2); INSERT INTO TABLE50 VALUES(3); SAVEPOINT SQL1; INSERT INTO TABLE50 VALUES(4); INSERT INTO TABLE50 VALUES(5); COMMIT; INSERT INTO TABLE50 VALUES(6); ROLLBACK TO SAVEPOINT SQL1; SELECT * FROM TABLE50;
① 4 ② 5 ③ 6 ④ 7
정답
3번
해설
정답: 3. COMMIT을 수행하면 이전 트랜잭션의 SAVEPOINT는 사라진다. 따라서 COMMIT 이후 ROLLBACK TO SAVEPOINT SQL1은 오류가 발생한다. 같은 세션에서 SELECT를 계속 수행하면 1~5는 이미 커밋되었고, 6은 현재 세션에서 입력된 상태이므로 총 6건이 조회된다.
오답 풀이
- 1번: SAVEPOINT로 정상 롤백된다고 잘못 해석한 값이다.
- 2번: INSERT 6이 조회되지 않는다고 잘못 해석한 값이다.
- 3번: 1~5와 6까지 총 6건으로 해석한 값이다.
- 4번: INSERT는 6번까지만 수행되었으므로 7건이 아니다.
보충 개념 COMMIT을 수행하면 해당 트랜잭션의 SAVEPOINT는 사라진다. COMMIT 이후 이전 SAVEPOINT로 롤백할 수 없다.