문제
아래 TABLE에 대한 SQL 수행 후 최종 SUM(COL1) 결과로 가장 적절한 것은?
- COL1: PRIMARY KEY
- COL2: CHECK (COL2 > 500)
SQLINSERT INTO T VALUES (500, 600); UPDATE T SET COL2 = 400 WHERE COL1 = 500; INSERT INTO T VALUES (500, 700); INSERT INTO T VALUES (270, 800); SELECT SUM(COL1) FROM T;
① 770 ② 500 ③ 0 ④ 오류로 인해 모든 작업이 취소된다.
정답
1번
해설
정답: 1. 첫 번째 INSERT는 정상 수행되어 COL1=500 행이 저장된다. UPDATE는 COL2를 400으로 바꾸려 하므로 CHECK(COL2 > 500)를 위반해 실패한다. 두 번째 INSERT는 COL1=500이 이미 존재하므로 PRIMARY KEY를 위반해 실패한다. 마지막 INSERT는 정상 수행되어 COL1=270 행이 추가된다. 따라서 최종 SUM(COL1)은 500 + 270 = 770이다.
오답 풀이
- 1번: 정상 반영된 COL1 값 500과 270의 합이다.
- 2번: 마지막 정상 INSERT를 누락한 값이다.
- 3번: 정상 INSERT가 모두 취소되는 상황이 아니다.
- 4번: 개별 DML 오류가 이전의 정상 수행 DML을 자동으로 모두 취소한다고 볼 수 없다.
보충 개념 제약조건을 위반한 DML은 실패하며 해당 변경은 반영되지 않는다. 이전에 정상 수행된 문장까지 자동으로 모두 취소되는 것은 아니다.