DDL, DML, DCL, TCL 개요
- SQL 명령어는 역할에 따라 크게 세 가지로 분류된다 (DDL, DML, DCL).
- TCL 은 문헌에 따라 DCL에 포함시키거나 독립 분류로 보기도 한다.
DDL (Data Definition Language): 데이터 구조(스키마) 정의
DML (Data Manipulation Language): 데이터 조작 (CRUD)
DCL (Data Control Language): 권한 및 접근 제어
DDL
- 데이터베이스의 구조를 정의하거나 변경할 때 사용한다. 테이블, 인덱스, 뷰 등 객체의 생성/수정/삭제를 담당한다.
CREATE: 객체 생성
ALTER: 객체 구조 변경
DROP: 객체 삭제
TRUNCATE: 테이블 데이터 전체 삭제 (구조는 유지)
예시
-- 테이블 생성
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- 컬럼 추가
ALTER TABLE users ADD COLUMN phone VARCHAR(20);
-- 컬럼 수정
ALTER TABLE users MODIFY COLUMN name VARCHAR(100) NOT NULL;
-- 테이블 삭제
DROP TABLE users;
-- 데이터만 전체 삭제 (테이블 구조는 유지)
TRUNCATE TABLE users;
- 참고: DDL은 실행 즉시 Auto Commit된다. ROLLBACK이 불가능하므로 운영 환경에서는 주의가 필요하다.
DML
- 테이블의 데이터를 조회하거나 변경할 때 사용한다. 가장 자주 사용하는 SQL 명령어들이 여기에 속한다.
SELECT: 데이터 조회
INSERT: 데이터 삽입
UPDATE: 데이터 수정
DELETE: 데이터 삭제
예시
-- 조회
SELECT name, email FROM users WHERE id = 1;
-- 삽입
INSERT INTO users (name, email) VALUES ('홍길동', 'hong@example.com');
-- 수정
UPDATE users SET name = '김철수' WHERE id = 1;
-- 삭제
DELETE FROM users WHERE id = 1;
- 참고: DML은 트랜잭션의 대상이다. COMMIT 전이라면 ROLLBACK으로 되돌릴 수 있다.
DCL
- 데이터베이스에 대한 접근 권한을 제어할 때 사용한다.
GRANT: 권한 부여
REVOKE: 권한 회수
예시
-- 특정 사용자에게 SELECT, INSERT 권한 부여
GRANT SELECT, INSERT ON my_database.users TO 'dev_user'@'localhost';
-- 권한 회수
REVOKE INSERT ON my_database.users FROM 'dev_user'@'localhost';
TCL
- 트랜잭션을 제어하는 COMMIT, ROLLBACK, SAVEPOINT를 별도로 TCL(Transaction Control Language)로 분류하기도 한다. 문헌에 따라 DCL에 포함시키거나 독립 분류로 보기도 한다.
예시
BEGIN; -- 트랜잭션 시작
INSERT INTO users (name, email) VALUES ('이영희', 'lee@example.com');
SAVEPOINT sp1;
UPDATE users SET name = '박영희' WHERE email = 'lee@example.com';
ROLLBACK TO sp1; -- UPDATE 취소, INSERT는 유지
COMMIT; -- 최종 반영
정리
SQL 명령어
├── DDL (구조 정의) → CREATE, ALTER, DROP, TRUNCATE
├── DML (데이터 조작) → SELECT, INSERT, UPDATE, DELETE
├── DCL (권한 제어) → GRANT, REVOKE
└── TCL (트랜잭션) → COMMIT, ROLLBACK, SAVEPOINT