← 개념서태블릿/PC 버전
2과목 · SQL 기본 및 활용·2

DDL (CREATE / ALTER / DROP / TRUNCATE)

테이블·컬럼 정의, 제약조건, ALTER 변형, DROP과 TRUNCATE 차이까지 DDL 전반을 다룹니다.

1. CREATE TABLE

CREATE TABLE emp (
  emp_id    INT           PRIMARY KEY,
  name      VARCHAR(50)   NOT NULL,
  dept_id   INT,
  email     VARCHAR(200)  UNIQUE,
  hired_at  DATE          DEFAULT CURRENT_DATE,
  salary    NUMERIC(12,0) CHECK (salary >= 0),
  CONSTRAINT fk_emp_dept FOREIGN KEY (dept_id) REFERENCES dept(dept_id)
);
  • 컬럼 이름, 타입, 제약을 한 번에 정의.
  • 외래키는 컬럼 레벨 또는 테이블 레벨 CONSTRAINT로 명명.
  • 이름 붙인 제약은 나중에 ALTER TABLE ... DROP CONSTRAINT로 관리하기 쉬움.

CTAS — CREATE TABLE AS SELECT

CREATE TABLE emp_backup AS SELECT * FROM emp WHERE hired_at < DATE '2024-01-01';
  • 데이터와 구조를 함께 복제.
  • 제약조건·인덱스는 일반적으로 복제되지 않는다 (Oracle은 NOT NULL만 복제).

2. ALTER TABLE

컬럼 추가 / 수정 / 삭제

ALTER TABLE emp ADD  middle_name VARCHAR(30);
ALTER TABLE emp MODIFY name VARCHAR(100);          -- Oracle
ALTER TABLE emp ALTER COLUMN name TYPE VARCHAR(100); -- PostgreSQL
ALTER TABLE emp DROP COLUMN middle_name;
ALTER TABLE emp RENAME COLUMN name TO full_name;

제약 추가 / 삭제

ALTER TABLE emp ADD CONSTRAINT uq_emp_email UNIQUE (email);
ALTER TABLE emp DROP CONSTRAINT uq_emp_email;

테이블 이름 변경

ALTER TABLE emp RENAME TO employee;  -- Oracle/PG
-- MySQL: RENAME TABLE emp TO employee;

3. DROP vs TRUNCATE vs DELETE

구분 분류 구조 데이터 롤백 트리거
DROP TABLE DDL 삭제됨 삭제됨 불가 무관
TRUNCATE TABLE DDL 유지 전부 삭제 불가 발화 X
DELETE FROM DML 유지 조건에 따라 삭제 가능 발화 O

"DDL은 자동 커밋되어 롤백이 불가능하다" — SQLD 단골 출제.

TRUNCATE TABLE emp;          -- 모든 행 즉시 제거, 구조 유지
DELETE FROM emp;             -- 행 제거(롤백 가능), 트리거 발화
DROP TABLE emp;              -- 테이블 자체 사라짐

4. 참조 무결성 옵션 (FK)

FOREIGN KEY (dept_id) REFERENCES dept(dept_id)
  ON DELETE CASCADE    -- 부모 삭제 시 자식도 삭제
  ON UPDATE SET NULL;  -- 부모 PK 변경 시 자식 FK를 NULL로
옵션 의미
NO ACTION / RESTRICT 참조가 있으면 삭제/변경 불가 (기본)
CASCADE 부모의 변경을 자식에 전파
SET NULL 자식의 FK를 NULL로
SET DEFAULT 자식의 FK를 DEFAULT 값으로

5. 뷰(VIEW)도 DDL로 생성

CREATE OR REPLACE VIEW v_emp_summary AS
SELECT dept_id, COUNT(*) AS cnt, AVG(salary) AS avg_sal
FROM emp GROUP BY dept_id;
  • 뷰는 가상 테이블 — 물리 저장하지 않고 SELECT 정의만 저장.
  • GROUP BY/집계가 포함된 뷰는 일반적으로 INSERT/UPDATE가 제한.
  • 뷰에 쿼리를 날리면 옵티마이저가 기본 테이블로 머지(merge) 해 실행.

6. 자주 출제되는 포인트

  • TRUNCATE = DDL, 롤백 불가, 트리거 미발화.
  • DROP = 구조까지 삭제.
  • ALTER로 컬럼을 삭제하면 제약도 함께 삭제.
  • 뷰는 물리적으로 구현되어 있지 않다 — 전형적 오답: "뷰는 물리적으로 구현되어 있다" → 틀림.
  • FK ON DELETE CASCADE는 부모 삭제 시 자식 행도 삭제.

7. 요약 체크리스트

  • CREATE TABLE에서 모든 기본 제약을 쓸 수 있다.
  • ALTER TABLE로 컬럼/제약/이름을 변경하는 구문을 쓸 수 있다.
  • DROP vs TRUNCATE vs DELETE를 6가지 차원에서 구분할 수 있다.
  • FK의 4가지 참조 옵션 동작을 설명할 수 있다.
  • 뷰와 기본 테이블의 저장 구조 차이를 설명할 수 있다.