DDL·제약조건 완벽 정리

SQLD 시험 출제 범위의 DDL 명령어와 제약조건을 구문 예시와 함께 정리

1. DDL 개요

DDL이란?

DDL(Data Definition Language)은 데이터베이스 구조를 정의·변경·삭제하는 SQL 명령어입니다. 테이블, 인덱스, 뷰 등 데이터베이스 객체의 생성과 변경을 담당합니다. DDL은 실행 즉시 AUTO COMMIT되므로 ROLLBACK이 불가능합니다.

DDL 명령어 종류

명령어설명대상
CREATE객체 생성TABLE, VIEW, INDEX 등
ALTER객체 구조 변경컬럼 추가/수정/삭제
DROP객체 완전 삭제테이블 자체를 제거
TRUNCATE데이터 전체 삭제 (구조 유지)테이블 데이터만 제거
RENAME객체 이름 변경테이블명 변경

2. CREATE TABLE

기본 구문

CREATE TABLE 테이블명 (
  컬럼명1 데이터타입 [DEFAULT 기본값] [제약조건],
  컬럼명2 데이터타입 [DEFAULT 기본값] [제약조건],
  ...
  [테이블 레벨 제약조건]
);

테이블명은 문자로 시작해야 하며, A-Z, 0-9, _, $, # 만 사용 가능합니다.

CREATE TABLE 예시

CREATE TABLE EMP (
  EMP_ID   NUMBER       PRIMARY KEY,
  EMP_NAME VARCHAR2(50) NOT NULL,
  DEPT_ID  NUMBER       REFERENCES DEPT(DEPT_ID),
  SALARY   NUMBER       DEFAULT 0,
  GRADE    VARCHAR2(1)  CHECK (GRADE IN ('A','B','C'))
);

CTAS (CREATE TABLE AS SELECT)

기존 테이블의 데이터를 복사하여 새 테이블을 생성합니다. NOT NULL을 제외한 제약조건은 복사되지 않습니다.

CREATE TABLE EMP_BACKUP AS
SELECT * FROM EMP;

구조만 복사하려면 WHERE 1=0 (Oracle) 또는 WHERE 1=2를 추가합니다.

3. 제약조건 (Constraints)

제약조건 종류

제약조건설명NULL 허용
PRIMARY KEY유일성 + NOT NULL (테이블당 1개)불가
UNIQUE유일성 보장 (여러 개 가능)가능 (NULL 중복 허용)
FOREIGN KEY참조 무결성 (부모 테이블 참조)가능
NOT NULLNULL 값 입력 금지불가
CHECK입력 값 범위/조건 제한가능
DEFAULT기본값 설정 (제약조건은 아님)가능

컬럼 레벨 vs 테이블 레벨

구분컬럼 레벨테이블 레벨
위치컬럼 정의 옆컬럼 정의 아래 별도 행
복합키불가가능
NOT NULL가능불가 (컬럼 레벨만 가능)

NOT NULL은 반드시 컬럼 레벨에서만 정의해야 합니다. 이것은 시험 빈출 포인트입니다.

PRIMARY KEY 특징

  • 1. UNIQUE + NOT NULL — 유일성과 NOT NULL을 동시에 보장
  • 2. 테이블당 1개만 가능 — 복합 PK는 가능하지만 PK 자체는 1개
  • 3. 자동 인덱스 생성 — PK 생성 시 UNIQUE INDEX가 자동으로 생성됨
  • 4. FK의 참조 대상 — 다른 테이블의 FK가 참조할 수 있음

FOREIGN KEY와 참조 무결성

FK는 부모 테이블의 PK 또는 UNIQUE 컬럼만 참조할 수 있습니다. 부모에 없는 값은 자식에 입력할 수 없습니다.

삭제 옵션부모 행 삭제 시 동작
CASCADE자식 행도 함께 삭제
SET NULL자식의 FK 값을 NULL로 변경
SET DEFAULT자식의 FK 값을 DEFAULT로 변경
RESTRICT자식이 참조 중이면 삭제 불가
NO ACTION참조 무결성 위반 시 에러 (기본값)

4. ALTER TABLE

ALTER TABLE 구문 정리

작업Oracle 구문SQL Server 구문
컬럼 추가ALTER TABLE T ADD (COL 타입)ALTER TABLE T ADD COL 타입
컬럼 수정ALTER TABLE T MODIFY (COL 타입)ALTER TABLE T ALTER COLUMN COL 타입
컬럼 삭제ALTER TABLE T DROP COLUMN COLALTER TABLE T DROP COLUMN COL
컬럼명 변경ALTER TABLE T RENAME COLUMN A TO Bsp_rename'T.A', 'B', 'COLUMN'
제약조건 추가ALTER TABLE T ADD CONSTRAINT 이름 제약조건

MODIFY 시 주의사항

  • 1. 데이터 타입 변경 — 컬럼에 데이터가 없으면 자유롭게 변경 가능
  • 2. 크기 축소 — 기존 데이터보다 작은 크기로 변경 불가
  • 3. NOT NULL 추가 — 기존 데이터에 NULL이 있으면 추가 불가
  • 4. DEFAULT 변경 — 변경 후 새로 INSERT되는 행부터 적용

5. DROP TABLE

기본 구문

DROP TABLE 테이블명 [CASCADE CONSTRAINT];

  • CASCADE CONSTRAINT — 해당 테이블을 참조하는 다른 테이블의 FK 제약조건도 함께 삭제
  • DROP 시 — 테이블 구조 + 데이터 + 인덱스 + 제약조건 모두 삭제
  • AUTO COMMIT — DDL이므로 ROLLBACK 불가

6. TRUNCATE vs DELETE

핵심 비교 테이블

항목TRUNCATEDELETE
분류DDL (데이터 정의어)DML (데이터 조작어)
ROLLBACK불가 (AUTO COMMIT)가능 (COMMIT 전까지)
WHERE 절사용 불가 (전체 삭제만)사용 가능 (조건 삭제)
로그최소 로그 기록행 단위 로그 기록
속도빠름느림 (대량 데이터)
저장 공간즉시 해제해제되지 않음
테이블 구조유지유지

TRUNCATE는 DDL이므로 AUTO COMMIT, DELETE는 DML이므로 ROLLBACK 가능 — 시험 필수 암기!

7. RENAME

테이블명 변경

DBMS구문
OracleRENAME OLD_TABLE TO NEW_TABLE
SQL Serversp_rename'OLD_TABLE', 'NEW_TABLE'

8. 시험 빈출 포인트

반드시 알아야 할 포인트

  • 1. DDL은 AUTO COMMIT — CREATE, ALTER, DROP, TRUNCATE, RENAME 실행 시 즉시 커밋
  • 2. TRUNCATE는 DDL, DELETE는 DML — ROLLBACK 가능 여부가 다름
  • 3. NOT NULL은 컬럼 레벨만 — 테이블 레벨 제약조건으로 NOT NULL을 정의할 수 없음
  • 4. PK = UNIQUE + NOT NULL — 테이블당 1개만 가능, 자동 인덱스 생성
  • 5. UNIQUE는 NULL 허용 — NULL은 중복 체크에서 제외됨 (NULL 여러 개 가능)
  • 6. FK는 PK 또는 UNIQUE만 참조 — 일반 컬럼은 참조할 수 없음
  • 7. CTAS는 NOT NULL만 복사 — PK, FK, CHECK 등 다른 제약조건은 복사되지 않음
  • 8. Oracle MODIFY vs SQL Server ALTER COLUMN — 컬럼 수정 구문이 DBMS마다 다름
  • 9. CASCADE CONSTRAINT — DROP TABLE 시 참조하는 FK도 함께 삭제
  • 10. ON DELETE CASCADE vs SET NULL — 부모 행 삭제 시 자식 행 처리 방식의 차이

개념을 확인했다면 문제로 실력을 검증해보세요