Daily Dev Q&A: SQL 명령어 (DDL, DML, DCL)
Topic (오늘의 주제)
SQL 명령어 분류 (DDL, DML, DCL)
: 데이터베이스와 소통하기 위한 SQL(Structured Query Language)을 그 목적과 기능에 따라 분류한 것.
Why (왜 사용하는가? 왜 중요한가?)
- 실무: 내가 지금 치려는 명령어가 되돌릴 수 있는지(Rollback), 아니면 **즉시 반영(Auto-commit)**되는지 구분하지 못하면 대형 사고(데이터 영구 삭제)로 이어진다.
- 구조적 의미: 데이터베이스의 '구조(뼈대)'를 만드는 것과 그 안의 '데이터(내용물)'를 다루는 것, 그리고 '접근 권한(보안)'을 제어하는 역할을 명확히 분리한다.
- 면접 의도: DELETE, TRUNCATE, DROP의 차이를 명확히 아는지, 트랜잭션이 적용되는 범위(DML)를 이해하고 있는지 확인한다.
Core Concept (핵심 개념 정리)
| 분류 | 풀이 (Full Name) | 핵심 역할 | 주요 명령어 | 트랜잭션 (Rollback) |
| DDL | Data Definition Language (데이터 정의어) |
**구조(Schema)**를 정의, 변경, 삭제함. (테이블 생성 등) | CREATE, ALTER, DROP, TRUNCATE | 불가능 (대부분 Auto-commit) |
| DML | Data Manipulation Language (데이터 조작어) |
**데이터(Row)**를 조회, 삽입, 수정, 삭제함. | SELECT, INSERT, UPDATE, DELETE | 가능 (Commit/Rollback 필요) |
| DCL | Data Control Language (데이터 제어어) |
데이터 접근 권한을 부여하거나 회수함. | GRANT, REVOKE | - |
참고 (TCL): DML을 제어하는 COMMIT, ROLLBACK을 별도로 **TCL(Transaction Control Language)**로 분류하기도 합니다.
Interview Answer Version (면접 답변식 요약)
"SQL 명령어는 역할에 따라 크게 세 가지로 나뉩니다.
테이블 같은 데이터 구조를 정의하는 DDL, 실제 데이터를 조회하거나 조작하는 DML, 그리고 데이터 접근 권한을 관리하는 DCL입니다.
가장 큰 차이점은 DML은 트랜잭션이 적용되어 롤백이 가능하지만, DDL은 실행 즉시 반영되어 롤백이 불가능하다는 점입니다."
Practical Tip (사용시 주의할 점 or 활용 예)
1. DELETE vs TRUNCATE (실무/면접 빈출 1순위)
둘 다 데이터를 지우지만, 동작 방식이 완전히 다릅니다.
- DELETE (DML):
- 데이터를 한 줄씩 지우며 로그를 남깁니다.
- 느립니다.
- 실수하면 Rollback 가능합니다.
- WHERE 조건절을 쓸 수 있습니다. (특정 데이터만 삭제 가능)
- TRUNCATE (DDL):
- 테이블의 공간을 통째로 잘라냅니다(초기화).
- 매우 빠릅니다.
- 실행 즉시 반영되어 Rollback 불가능합니다. (복구 불가)
- 조건 없이 전체 삭제만 가능합니다.
2. Oracle 사용 시 주의점 (Auto-commit)
- 사용자님이 관심 있는 Oracle 데이터베이스에서는 DDL(CREATE, ALTER 등)을 실행하면, 그 이전에 실행했던 DML(INSERT 등)까지 강제로 Commit 되어버립니다.
- 시나리오: 데이터를 열심히 INSERT 하다가(아직 커밋 안 함), 테이블 컬럼을 ALTER로 수정하는 순간, 앞선 INSERT들이 자동으로 DB에 영구 저장됩니다.
예상 꼬리 질문 정리
- "DELETE, TRUNCATE, DROP 명령어의 차이점을 설명해 주세요."
- (DELETE: 데이터만 삭제(복구O), TRUNCATE: 데이터 전체 초기화(복구X), DROP: 테이블 자체를 파괴)
- "DML 중 SELECT를 따로 DQL(Data Query Language)로 분류하기도 하는데, 그 이유는 무엇일까요?"
- (SELECT는 데이터의 상태를 변경하지 않고 조회만 하기 때문이라는 점 언급)
- "DDL은 왜 롤백이 안 되나요?"
- (데이터 딕셔너리(시스템 카탈로그)에 정의를 바로 반영하기 때문에 트랜잭션 로그를 쌓지 않는 구조적 특징 설명)
'Archive > Daily Dev Q&A' 카테고리의 다른 글
| Daily Dev Q&A: Spring Framework (0) | 2025.12.23 |
|---|---|
| Daily Dev Q&A: 트랜잭션 (Transaction) (0) | 2025.12.22 |
| Dailly Dev Q&A: 정규화 (0) | 2025.12.18 |
| Daily Dev Q&A: 자바의 람다 표현식 (0) | 2025.12.16 |
| Daily Dev Q&A: RDBMS (0) | 2025.12.15 |