DDL(데이터 정의어)
f
firststep 에디터
IT / 자격증 전문 라이터
2026년 2월 27일981
DDL(데이터 정의어)
1) DDL이 뭐냐?
- 데이터 자체(행)를 바꾸는 게 아니라, 테이블 “구조”를 바꾸는 SQL입니다.
- 예: 테이블 생성/컬럼 추가/제약조건 추가/테이블 삭제 등
- 중요한 특징: 대부분 자동 COMMIT이라서, 실행하면 보통 ROLLBACK으로 되돌리기 어렵습니다.
2) CREATE TABLE: 테이블 만들기
기본 형태
CREATE TABLE 테이블명 (
컬럼명 데이터타입 제약조건,
...
);
예시(이미지의 STUDENT 예)
- PRIMARY KEY: 중복 불가 + NULL 불가 (행을 구분하는 대표키)
- NOT NULL: 반드시 값 있어야 함
- DEFAULT: 값 안 넣으면 기본값
- REFERENCES: 외래키(다른 테이블의 PK/UK를 참조)
CREATE TABLE student (
student_id NUMBER(5) PRIMARY KEY,
name VARCHAR2(50) NOT NULL,
age NUMBER(3),
enroll_date DATE DEFAULT SYSDATE,
dept_id NUMBER(3) REFERENCES department(dept_id)
);
쉽게 말하면
- 학생은 student_id로 유일하게 구분하고,
- 이름은 비면 안 되고,
- 학과번호는 department 테이블에 존재하는 값만 넣게 막는 겁니다.
3) 참조 무결성 옵션(외래키 ON DELETE …)
부모-자식 테이블 관계에서 부모 행이 삭제될 때 자식은 어떻게 할지 정합니다.
옵션 4가지(이미지 핵심)
- ON DELETE CASCADE
- 부모 삭제 → 자식도 같이 삭제
- 예: 게시글 삭제하면 댓글도 같이 삭제
- ON DELETE SET NULL
- 부모 삭제 → 자식의 FK를 NULL로
- 예: 학과 삭제되면 학생 dept_id를 NULL로 (소속 없음)
- ON DELETE SET DEFAULT
- 부모 삭제 → 자식 FK를 기본값으로
- 예: 기본 학과(미정=0)로 이동
- NO ACTION / RESTRICT
- 부모 삭제하려고 하면 에러(자식이 참조 중이면 삭제 불가)
- 예: 주문내역이 있는 고객은 고객 삭제 금지
간단 예(형태만):
FOREIGN KEY (parent_id)
REFERENCES parent_table(parent_id)
ON DELETE CASCADE;
4) ALTER TABLE: 테이블 구조 변경
이미지에 나온 대표 기능들만 정리하면:
4-1) 컬럼 추가(ADD COLUMN)
ALTER TABLE employee
ADD phone_number VARCHAR2(15) NOT NULL;
4-2) 컬럼 삭제(DROP COLUMN)
- 해당 컬럼 데이터도 같이 사라짐(복구 어려움)
ALTER TABLE employee
DROP COLUMN phone_number;
4-3) 컬럼명 변경(RENAME COLUMN)
(DBMS마다 지원 차이 있음)
ALTER TABLE employee
RENAME COLUMN name TO full_name;
4-4) 데이터 타입 변경(MODIFY)
ALTER TABLE employee
MODIFY salary NUMBER(10,2);
4-5) 제약조건 추가/삭제
ALTER TABLE employee
ADD CONSTRAINT chk_salary CHECK (salary > 0);
ALTER TABLE employee
DROP CONSTRAINT chk_salary;
4-6) 기본값 설정(SET DEFAULT)
ALTER TABLE employee
MODIFY join_date DEFAULT SYSDATE;
5) RENAME TABLE: 테이블 이름 바꾸기
- 구조/데이터는 그대로, 이름만 변경
RENAME emp TO emp_backup;
주의(이미지 포인트)
- 뷰/프로시저/외래키 등 의존 객체가 있으면 영향이 갈 수 있어 점검 필요
6) DROP TABLE vs TRUNCATE TABLE (아주 중요)
DROP TABLE
- 테이블 자체 삭제(구조+데이터+인덱스/제약 등 함께 제거)
- 다시 쓰려면 CREATE TABLE부터 다시 해야 함
DROP TABLE emp_backup;
TRUNCATE TABLE
- 데이터만 전부 삭제, 테이블 구조는 유지
- 일반적으로 DELETE보다 빠름
- 대부분 ROLLBACK 불가 + 자동 커밋 성격
TRUNCATE TABLE emp_backup;
한 줄 비유
- DROP: “엑셀 파일 자체를 삭제”
- TRUNCATE: “엑셀은 남기고, 행 데이터만 전체 삭제”
7) 인덱스(Index) 한 줄 설명
- 인덱스는 검색 속도 향상을 위한 데이터 구조입니다.
- 책의 “색인”처럼, 조건 검색(WHERE), 정렬, 조인에서 빠르게 찾게 해줍니다.
- 대신 인덱스가 많으면 INSERT/UPDATE/DELETE 시 유지 비용이 생길 수 있습니다.
최종 요약
- DDL: 구조를 정의/변경 (대부분 자동 커밋)
- CREATE TABLE: 컬럼/타입/제약조건 정의
- FK ON DELETE 옵션: CASCADE / SET NULL / SET DEFAULT / RESTRICT(NO ACTION)
- ALTER TABLE: 컬럼 추가/삭제/변경, 제약조건 추가/삭제
- RENAME: 이름만 변경
- DROP vs TRUNCATE: 구조까지 삭제 vs 데이터만 비우기
- INDEX: 조회 속도 향상(대신 쓰기 성능 비용)
f
firststep 에디터 · IT / 자격증 전문 라이터
firststep.kr의 실무 에디터로서 무언가를 처음 도전하는 분들이 헤매지 않도록 검증된 지식과 실습 가이드를 작성합니다.
댓글 0개
댓글을 작성하려면 로그인이 필요합니다
간단한 이메일과 비밀번호로 3초 만에 가입하고 의견을 남겨보세요.
첫 번째 댓글을 남겨보세요!