[SQL] DDL / DML / DCL / TCL 총정리 (Oracle 기준)
[SQL] DDL / DML / DCL / TCL 총정리 (Oracle 기준)
이 글은 Oracle DB 기준으로 SQL을 분류 체계(DDL, DML, DCL, TCL)에 따라 정리한 글이다. 단순 문법 나열이 아니라, 각 분류가 왜 필요한지와 언제 사용하는지를 함께 설명한다.
1. SQL 분류 개요
SQL은 역할에 따라 네 가지로 분류된다. 이 분류는 Oracle 시험, 실무, 면접에서 모두 기본 전제로 사용된다.
| 분류 | 이름 | 역할 |
|---|---|---|
| DDL | Data Definition Language | 데이터 구조 정의 |
| DML | Data Manipulation Language | 데이터 조회/조작 |
| DCL | Data Control Language | 권한 제어 |
| TCL | Transaction Control Language | 트랜잭션 제어 |
2. DDL (Data Definition Language)
2-1. DDL이란?
DDL은 데이터베이스의 구조 자체를 정의하는 SQL이다.
테이블, 컬럼, 제약조건 같은 뼈대를 만드는 역할을 하며, 데이터가 아니라 구조를 다룬다.
DDL은 실행 즉시 반영되며, ROLLBACK이 불가능하다는 특징이 있다.
2-2. 주요 DDL 문법
CREATE TABLE
CREATE TABLE USERS (
ID NUMBER PRIMARY KEY,
NAME VARCHAR2(50) NOT NULL,
EMAIL VARCHAR2(100) UNIQUE,
CREATED_AT DATE
);
ALTER TABLE
ALTER TABLE USERS
ADD PHONE VARCHAR2(30);
DROP TABLE
DROP TABLE USERS;
TRUNCATE TABLE
TRUNCATE TABLE USERS;
TRUNCATE는 테이블 구조는 유지하고 데이터만 즉시 삭제한다. DELETE와 달리 ROLLBACK이 불가능하다.
3. DML (Data Manipulation Language)
3-1. DML이란?
DML은 테이블에 저장된 데이터를 조회하거나 변경하는 SQL이다.
실제 서비스에서 가장 많이 사용되는 SQL이며, 트랜잭션의 영향을 받는다.
3-2. SELECT (조회)
SELECT ID, NAME, EMAIL
FROM USERS
WHERE EMAIL IS NOT NULL;
3-3. INSERT (삽입)
INSERT INTO USERS (ID, NAME, EMAIL, CREATED_AT)
VALUES (1, '홍길동', 'hong@test.com', SYSDATE);
3-4. UPDATE (수정)
UPDATE USERS
SET EMAIL = 'new@test.com'
WHERE ID = 1;
3-5. DELETE (삭제)
DELETE FROM USERS
WHERE ID = 1;
DML은 COMMIT을 해야 실제로 반영되며, ROLLBACK으로 취소할 수 있다.
4. TCL (Transaction Control Language)
4-1. TCL이란?
TCL은 트랜잭션의 흐름을 제어하는 SQL이다.
트랜잭션은 여러 DML 작업을 하나의 작업 단위로 묶는 개념이다.
4-2. 주요 TCL 문법
COMMIT
COMMIT;
현재 트랜잭션에서 수행한 모든 DML을 확정한다.
ROLLBACK
ROLLBACK;
마지막 COMMIT 이후의 모든 작업을 취소한다.
SAVEPOINT
SAVEPOINT A;
UPDATE USERS SET NAME = '임꺽정' WHERE ID = 1;
ROLLBACK TO A;
SAVEPOINT는 트랜잭션 중간 지점을 만들어 부분 롤백을 가능하게 한다.
5. DCL (Data Control Language)
5-1. DCL이란?
DCL은 사용자의 권한을 제어하는 SQL이다.
누가 어떤 테이블을 조회/수정할 수 있는지를 결정하며, 보안과 직결된다.
5-2. GRANT (권한 부여)
GRANT SELECT, INSERT
ON USERS
TO USER_A;
USER_A에게 USERS 테이블에 대한 조회와 삽입 권한을 부여한다.
5-3. REVOKE (권한 회수)
REVOKE INSERT
ON USERS
FROM USER_A;
부여했던 권한을 회수한다.
5-4. ROLE
CREATE ROLE READ_ONLY;
GRANT SELECT ON USERS TO READ_ONLY;
GRANT READ_ONLY TO USER_A;
ROLE은 여러 권한을 묶어 관리하기 위한 단위다.
6. DDL / DML / DCL / TCL 차이 정리
| 구분 | 대상 | ROLLBACK | 주 용도 |
|---|---|---|---|
| DDL | 구조 | 불가 | 테이블/스키마 정의 |
| DML | 데이터 | 가능 | 조회/삽입/수정/삭제 |
| TCL | 트랜잭션 | - | COMMIT/ROLLBACK |
| DCL | 권한 | 불가 | 보안/접근 제어 |
7. 마무리
SQL은 단순히 문법을 외우는 것이 아니라, 어떤 상황에서 어떤 분류의 SQL을 쓰는지를 이해하는 것이 중요하다.
Oracle 기준으로 DDL, DML, DCL, TCL을 구분해서 이해하면 실무와 시험 모두에서 혼동이 줄어든다.