문제
다음 실행 후 SELECT COUNT(*) FROM T WHERE C1 > 100;의 결과는? (T 테이블은 빈 상태)
BEGIN;
SQLINSERT INTO T VALUES(50); INSERT INTO T VALUES(150);
SAVEPOINT S1;
SQLUPDATE T SET C1 = C1 + 100 WHERE C1 = 50; INSERT INTO T VALUES(200);
SAVEPOINT S2;
SQLDELETE FROM T WHERE C1 = 150;
ROLLBACK TO S1;
SQLUPDATE T SET C1 = 250 WHERE C1 = 150;
COMMIT;
① 1 ② 2 ③ 3 ④ 0
정답
1번
해설
① 결과는 1이다. 실행과정: (50),(150) 삽입 → S1 → UPDATE로 50→150 → (200) 삽입 → S2 → DELETE로 (150) 삭제 → ROLLBACK TO S1 (S1 이후 모든 작업 취소) → 현재 상태는 (50),(150) → UPDATE로 150→250 → COMMIT. 최종 데이터는 (50),(250)이므로 C1>100인 건수는 (250) 1건이다. ② 2건은 ROLLBACK TO S1의 효과를 제대로 이해하지 못한 것이다. ③ 3건은 ROLLBACK TO S1의 효과를 무시한 것이다. ④ 0건은 전체 ROLLBACK으로 잘못 이해한 것이다.