SQLD · SQL 개발자
DDL·DML·TCL
명령어를 분류하고 각 분류의 트랜잭션 동작을 묻습니다. DDL 이 자동 커밋을 일으킨다는 점, 그래서 DDL 앞의 DML 까지 함께 확정된다는 점이 반복해서 출제됩니다. TRUNCATE 와 DELETE 의 차이도 단골입니다.
이 주제에서 다루는 내용
- DDL, DML, DCL, TCL 의 분류
- CREATE, ALTER, DROP, TRUNCATE 의 동작과 되돌릴 수 있는 범위
- INSERT, UPDATE, DELETE, MERGE
- COMMIT, ROLLBACK, SAVEPOINT
- 제약조건의 종류와 삭제 시 연쇄 동작
자주 틀리는 지점
- TRUNCATE 를 롤백할 수 있다고 보는 실수. DDL 이라 자동 커밋됩니다.
- DDL 실행 전의 DML 이 롤백 가능하다고 보는 경우. 함께 커밋됩니다.
- DELETE 와 TRUNCATE 가 저장 공간에 미치는 영향을 같게 보는 경우.
연습문제 3문항
아래 문항은 오리지널 문제입니다. 기출문제가 아닙니다.
다음 중 트랜잭션 제어(TCL)와 DDL·DCL의 자동 커밋 동작에 대한 설명으로 옳지 않은 것은?
- A. ROLLBACK 명령어는 명시적으로 시작된 트랜잭션을 취소하여 데이터베이스를 트랜잭션 시작 이전 상태로 복원한다.
- B. DDL 문장인 CREATE TABLE이나 DROP TABLE은 실행과 동시에 자동으로 COMMIT되어 이전 트랜잭션이 종료된다.
- C. GRANT 명령어로 부여된 권한은 DCL에 속하며, 해당 명령어 역시 자동 COMMIT이 발생하여 롤백할 수 없다.
- D. UPDATE나 DELETE와 같은 DML 문장은 명시적 COMMIT 또는 ROLLBACK 전까지 다른 세션에서 변경사항을 볼 수 있다.
정답: D
해설. DML 문장인 UPDATE나 DELETE는 COMMIT되기 전까지 다른 세션에서 변경사항을 볼 수 없다. 트랜잭션 격리 수준에 따라 다르지만 일반적으로 커밋되지 않은 변경사항은 해당 세션에서만 확인 가능하다. A는 ROLLBACK의 정확한 기능이고, B는 DDL의 자동 COMMIT 특성이 맞으며, C는 DCL 명령어의 자동 COMMIT 특성을 올바르게 설명한다.
다음은 제조업체의 생산계획 시스템에서 사용하는 SQL문들이다. 각 명령어의 분류가 올바르게 짝지어진 것은? 1) CREATE TABLE product_plan (...); 2) INSERT INTO product_plan VALUES (...); 3) GRANT SELECT ON product_plan TO manager; 4) COMMIT;
- A. 1) DDL, 2) DML, 3) DCL, 4) TCL
- B. 1) DML, 2) DDL, 3) DCL, 4) TCL
- C. 1) DDL, 2) DML, 3) TCL, 4) DCL
- D. 1) DDL, 2) DCL, 3) DML, 4) TCL
정답: A
해설. 정답은 A이다. CREATE TABLE은 테이블 구조를 생성하는 DDL, INSERT는 데이터를 조작하는 DML, GRANT는 권한을 부여하는 DCL, COMMIT은 트랜잭션을 확정하는 TCL이다. B는 CREATE와 INSERT의 분류를 바꾼 오답이고, C는 GRANT와 COMMIT을 잘못 분류한 오답이며, D는 INSERT와 GRANT를 잘못 분류한 오답이다.
다음 결과표를 얻기 위한 해석으로 가장 타당한 것은? [SHIPPING 테이블] ORDER_ID | STATUS | AMOUNT 101 | PENDING| 15000 102 | SHIPPED| 25000 103 | PENDING| 30000 [실행 결과] STATUS | TOTAL_COUNT PENDING | 2 SHIPPED | 1 SELECT STATUS, COUNT(*) AS TOTAL_COUNT FROM SHIPPING GROUP BY STATUS ORDER BY STATUS;
- A. SELECT는 DML에 속하며, 테이블의 데이터를 조회하는 명령어이다.
- B. GROUP BY는 DDL에 속하며, 테이블 구조를 변경하는 명령어이다.
- C. ORDER BY는 TCL에 속하며, 트랜잭션을 제어하는 명령어이다.
- D. COUNT 함수는 DCL에 속하며, 권한을 부여하는 명령어이다.
정답: A
해설. SELECT문은 DML(Data Manipulation Language)에 속하는 데이터 조회 명령어이다. 주어진 SQL은 SHIPPING 테이블에서 STATUS별로 그룹화하여 각 상태의 건수를 조회하는 DML 구문이다. GROUP BY와 ORDER BY는 SELECT문의 절(clause)이며, COUNT는 집계함수로 모두 DML 범주에 포함된다. DDL은 테이블 생성/변경, TCL은 트랜잭션 제어, DCL은 권한 관리에 사용되므로 각각 B, C, D는 명령어 분류를 잘못 설명하고 있다.