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가지(이미지 핵심)
- 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: 조회 속도 향상(대신 쓰기 성능 비용)
반응형