Programming/Database

[DB] DDL, DML, DCL

_채채_ 2025. 10. 29. 09:20
SQL 명령어는 목적에 따라 크게 DDL, DML, DCL 이렇게 세 가지로 분류된다. 개인적으로 글자도 비슷비슷해서 공부하면서 헷갈렸다...그래서 정리하기 위한 글을 작성해보기로 했다! 각각의 역할과 차이를 명확하게 이해해보자.

DDL(Data Definition Language) - 데이터 정의어

DDL은 데이터베이스의 구조를 정의하고 변경하는 명령어이다. 즉 테이블을 만들고 수정하고 삭제하는 작업이라고 생각하면 된다.

-- 테이블 생성
CREATE TABLE users (
    id    INT PRIMARY KEY,
    email VARCHAR(100) NOT NULL,
    role  VARCHAR(20)
);

-- 컬럼 추가
ALTER TABLE users ADD COLUMN created_at TIMESTAMP;

-- 테이블 삭제 (구조 + 데이터 모두)
DROP TABLE users;

-- 데이터만 전체 삭제 (구조 유지)
TRUNCATE TABLE users;

 

핵심 명령어

아래와 같은 명령어들이 포함된다.

CREATE   → 생성
ALTER    → 구조 변경
DROP     → 삭제 (구조 + 데이터)
TRUNCATE → 데이터만 전체 삭제
RENAME   → 이름 변경

이것들 중 CREATE, ALTER,DROP은 프로젝트에서 정말 많이 사용했던 거 같다.

중요한 특징으로는

  • DDL은 Auto Commit 이므로 실행 즉시 반영되며 ROLLBACK이 불가능 하다는 것이다.
  • 따라서 운영 DB에서 사용할 때 실수로 DROP하면 되돌릴수 없으니 주의가 필요하다.

DML(Data Manipulation Language) - 데이터 조작어

DML은 테이블 내의 데이터를 조회, 조작하는 명령어다. 실제로 데이터를 다룰 때 가장 자주 쓰이는 분류이기도 하다.

-- 조회
SELECT * FROM users WHERE role = 'ADMIN';

-- 삽입
INSERT INTO users (email, role)
VALUES ('test@test.com', 'USER');

-- 수정
UPDATE users
SET role = 'ADMIN'
WHERE id = 1;

-- 삭제
DELETE FROM users WHERE id = 1;

 

핵심 명령어

SELECT → 조회
INSERT → 삽입
UPDATE → 수정
DELETE → 삭제

DDL과의 차이는 트랜잭션 제어가 가능하다는 것이다. commit 전까지는 ROLLBACK으로 되돌릴 수 있다.

 

DCL( Data Control Language) - 데이터 제어어

DCL은 데이터 베이스 접근 권한을 제어하는 명령어다. 누가 어떤 데이터에 접근할 수 있는지를 관리한다.

-- 권한 부여
GRANT SELECT, INSERT ON users TO 'hong';

-- 권한 취소
REVOKE INSERT ON users FROM 'hong';

핵심 명령어

GRANT  → 권한 부여
REVOKE → 권한 취소

실무에서는CS 담당자에게 조회를 위한 SELECT권한만 부여하거나 개발자에게 운영 DB의 쓰기 권한을 제한하는 식으로 활용한다고 한다.