sqld

DDL(데이터 정의어)

자격증원톱 2026. 2. 27. 11:20
반응형

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가지(이미지 핵심)

  1. ON DELETE CASCADE
  • 부모 삭제 → 자식도 같이 삭제
  • 예: 게시글 삭제하면 댓글도 같이 삭제
  1. ON DELETE SET NULL
  • 부모 삭제 → 자식의 FK를 NULL로
  • 예: 학과 삭제되면 학생 dept_id를 NULL로 (소속 없음)
  1. ON DELETE SET DEFAULT
  • 부모 삭제 → 자식 FK를 기본값으로
  • 예: 기본 학과(미정=0)로 이동
  1. 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: 조회 속도 향상(대신 쓰기 성능 비용)
반응형