DDL

이강용·2026년 9월 23일

SQLD

목록 보기
5/12

DDL의 개념과 CREATE문

데이터 정의어(Data Definition Language, DDL)

  • 데이터베이스 객체를 생성·변경·삭제하는 SQL 명령어
  • 데이터를 저장할 구조(테이블, 인덱스, 뷰 등)를 정의
  • DDL은 실행 전·후로 묵시적 커밋(Implicit Commit)이 발생
  • 따라서 ROLLBACK으로 되돌리수 없음
명령어설명주요 특징
CREATE데이터베이스, 테이블, 뷰, 인덱스 등 새로운 데이터베이스 객체를 생성합니다.객체의 구조를 정의합니다.
ALTER기존에 존재하는 데이터베이스 객체의 구조를 변경합니다.컬럼 추가/삭제, 데이터 타입 변경 등이 가능합니다.
DROP데이터베이스 객체를 완전히 삭제합니다.데이터와 구조가 모두 삭제되며, 실행 후 복구가 어렵습니다.
TRUNCATE테이블의 모든 데이터를 삭제하고 할당된 저장 공간을 초기화합니다.테이블 구조는 유지되며, DELETE보다 처리 속도가 빠릅니다.

CREATE TABLE 기본 문법

  • CREATE TABLE은 새 테이블을 생성하는 명령
  • 테이블 이름, 컬럼 목록, 각 컬럼의 자료형(Data Type), 제약 조건(Constrainst)을 함께 정의
  • 대괄호([])는 선택 사항을 의미
  • 컬럼 사이는 쉼표(,)로 구분

자료형(Data Type)

  • 컬럼에 저장될 수 있는 데이터의 종류와 형식을 정의하는 규칙
  • 테이블을 생성할 때 모든 컬럼에는 반드시 자료형을 지정해야 함
  • 자료형은 데이터 무결성과 저장 효율에 직접 영향을 줌
  • 자료형이 다르면 저장 공간과 비교 방식도 달라짐
  • 잘못된 자료형 선택은 성능 저하와 오류를 초래함
분류대표타입저장데이터
문자형CHAR, VARCHAR2 (또는 VARCHAR)고정 및 가변 길이 문자열
숫자형NUMBER, INT, FLOAT정수 및 실수 형태의 숫자 데이터
날짜형DATE, TIMESTAMP연, 월, 일, 시, 분, 초 등의 날짜 및 시간 데이터
대용량형BLOB, CLOB이미지, 동영상, 대용량 텍스트 등의 바이너리 및 텍스트 데이터

문자형(CHAR / VARCHAR2)

1) CHAR(고정 길이)

  • CHAR(n)은 고정 길이 문자열을 저장하는 타입
  • 지정한 길이 n 만큼 저장 공간을 항상 확보
  • 입력 값이 n보다 짧으면 부족한 공간을 공백(space)으로 채움
  • 비교 시 짧은 쪽에 공백을 채워 비교(Blank-padded 방식)
  • WHERE 'ABC'로 검색하면 'ABC '도 함께 검색

2) VARCHAR2(가변길이)

  • VARCHAR2(n)은 가변 길이 문자열을 저장하는 타입
  • 지정한 길이 n은 최대 길이이며, 입력된 길이만큼만 공간을 사용
  • 길이 단위는 기본적으로 바이트(BYTE)임
  • 비교 시 입력된 값을 그대로 비교함(뒤 공백 포함)
  • WHERE 'ABC'로 검색하면 'ABC '는 검색되지 않음

숫자형(NUMBER)

  • NUMBER는 정수와 실수를 모두 저장할 수 있는 숫자 타입
  • Oracle에서 가장 널리 사용되는 숫자형
  • 형식 : NUMBER(P,S)
    • P(정밀도, Precision): 전체 자릿수(1~38)
    • S(스케일, Scale): 소숫점 이하 자릿수
구분 / 조건의미저장가능
안 쓸 때 (NUMBER)전체 자릿수와 소수점 자릿수의 제한이 없음 (최대 정밀도 38자리)대용량 정수 및 실수 데이터 (최대 38자리까지 자유롭게 저장 가능)
P만 쓸 때 (NUMBER(P))소수점 이하 자릿수가 0으로 지정됨 (NUMBER(P, 0)과 동일하며 정수만 허용)총 P자리 이하의 정수 (예: NUMBER(3)은 -999 ~ 999)
4, 2일 때 (NUMBER(4, 2))전체 4자리 중 소수점 이하 2자리 지정 (정수부 최대 2자리, 소수부 2자리)-99.99 ~ 99.99 범위의 숫자
5, 2일 때 (NUMBER(5, 2))전체 5자리 중 소수점 이하 2자리 지정 (정수부 최대 3자리, 소수부 2자리)-999.99 ~ 999.99 범위의 숫자

날짜형(DATE/TIMESTAMP)

1) DATE

  • DATE는 Oracle의 기본 날짜 타입
  • 연·월·일·시·분·초 정보를 모두 함께 저장
  • 저장 크기는 7바이트 고정

2) TIMESTAMP

  • TIMESTAMP는 DATE보다 정밀한 시간을 저장하는 타입
  • 초 단위 아래 소수점 이하 9자리까지 표현할 수 있음
  • 시간대(Time Zone) 정보를 함께 저장하려면 TIMESTAMP WITH TIME ZONE을 사용
  • 정밀한 로그·트랜잭션 시각에 적합

제약조건(Constraint)

  • 제약조건(Constraint)은 컬럼에 저장될 수 있는 데이터의 규칙을 정의하는 장치
  • 잘못된 데이터 입력을 DBMS가 자동으로 차단
  • 테이블 생성 시 또는 ALTER TABLE로 나중에 추가할 수 있음
  • 제약조건에 이름을 부여하면 이름으로 추가·삭제 할 수 있음
종류영문특징
기본키PRIMARY KEY테이블의 각 행을 고유하게 식별하며, 중복 값과 NULL을 허용하지 않습니다. (UNIQUE + NOT NULL)
외래키FOREIGN KEY다른 테이블의 기본키를 참조하여 테이블 간의 관계를 정의하고 데이터의 참조 무결성을 유지합니다.
고유키UNIQUE컬럼에 중복된 데이터가 입력되는 것을 방지합니다. (단, NULL 값은 허용됨)
널 금지NOT NULL해당 컬럼에 빈 값(NULL)이 입력되는 것을 원천적으로 차단합니다.
검사(점검)CHECK설정된 특정 조건식을 만족하는 데이터만 입력되도록 제한합니다.
기본값DEFAULT데이터를 입력할 때 값을 생략하면 미리 지정된 기본값이 자동으로 입력됩니다.

기본키(PRIMARY KEY, PK)

  • PK는 각 행을 유일하게 식별하는 컬럼(또는 컬럼 조합)임
  • UNIQUE(중복 불허)
  • NOT NULL(NULL 불허)
  • PK 생성 시 자동으로 인덱스가 함께 만들어 짐

외래키(FOREIGN KEY, FK)

  • FK는 다른 테이블의 PK를 참조하는 컬럼
  • 두 테이블 간 참조 무결성(Referential Integrity)을 보장
  • 부모 테이블에 없는 값은 자식 테이블에 입력할 수 없음
  • FK컬럼은 기본적으로 NULL을 허용하며, NOT NULL을 함께 지정할 수 있음
옵션동작
NO ACTION부모 테이블의 데이터가 삭제될 때 자식 테이블에 참조하는 데이터가 존재하면 삭제를 거부합니다. (아무 작업도 수행하지 않으며, 대부분의 RDBMS 기본값입니다.)
CASCADE부모 테이블의 데이터가 삭제될 때, 해당 데이터를 참조하는 자식 테이블의 행(데이터)도 연쇄적으로 함께 삭제됩니다.
SET NULL부모 테이블의 데이터가 삭제될 때, 해당 데이터를 참조하는 자식 테이블의 컬럼 값을 NULL로 변경합니다.

고유키(UNIQUE)

  • UNIQUE는 컬럼 값의 중복 입력을 불허하는 제약조건
  • Oracle에서는 단일 컬럼 UNIQUE에 여러 NULL이 동시에 존재할 수 있음
  • UNIQUE 생성 시 자동으로 인덱스가 만들어짐

ALTER

  • ALTER TABLE은 기존 테이블의 구조를 변경하는 명령어
  • 컬럼 추가·변경·삭제와 제약조건 추가·삭제가 가능
  • 자동 커밋되며 ROLLBACK으로 되돌리수 없음

1) 컬럼추가(ADD)

  • 형식: ALTER TABLE 테이블명 ADD (컬럼명 자료형[제약조건]);
  • 추가된 컬럼은 테이블의 마지막 위치에 들어감
  • 기존 행의 추가 컬럼 값은 NULL로 초기화 됨

2) 컬럼 자료형 변경(MODIFY)

  • 형식 : ALTER TABLE 테이블명 MODIFY (컬럼명 자료형[제약조건]);
  • 데이터 존재 여부에 따라 변경 제약이 있음

3) 컬럼명 변경(RENAME COLUMN)

  • 이름만 변경되며 데이터·자료형·제약조건은 유지됨
  • DDL이므로 자동 커밋되며 ROLLBACK 불가

4) 컬럼 삭제(DROP COLUMN)

  • 컬럼 삭제 시 해당 컬럼의 모든 데이터도 사라짐
  • 삭제된 컬럼은 ROLLBACK으로 복구할 수 없음

5) 제약조건 추가·삭제
① 제약 조건 추가
- ADD CONSTRAINT로 이름 있는 제약조건을 추가
- CONSTRAINT 이름은 삭제 시 사용되므로 의미 있게 부여
② 제약 조건 삭제
- DROP CONSTRAINT 뒤에 이름을 지정해 삭제
- DDL이므로 자동 커밋되며 ROLLBACK 불가

DROP

  • DROP TABLE은 테이블 자체를 완전히 제거하는 명령
  • 테이블 구조·데이터·인덱스·제약조건이 모두 삭제
  • 자동 커밋되며 ROLLBACK으로 복구할 수 없음
  • FK로 참조 중인 테이블은 CASCADE CONSTRAINTS 옵션이 필요

TRUNCATE

  • TRUNCATE TABLE은 모든 데이터를 삭제하는 명령
  • 테이블 구조(컬럼·제약조건·인덱스)는 유지
  • DDL이므로 자동 커밋되며 ROLLBACK 불가
  • WHERE절을 사용할 수 없음

RENAME(테이블명 변경)

  • 테이블 이름을 변경하는 명령
  • 테이블 구조·제약조건·인덱스는 유지
  • 자동 커밋됨

DELETE/TRUNCATE/DROP 비교

  • 세 명령 모두 데이터를 지우지만 처리 방식이 다름
항목DELETETRUNCATERENAME
명령 분류DML (데이터 조작어)DDL (데이터 정의어)DDL (데이터 정의어)
처리 대상테이블의 특정 행(Row) 단위 데이터테이블의 전체 데이터테이블(또는 객체)의 이름
테이블 구조유지됨유지됨유지됨 (이름만 변경)
WHERE 절사용 가능 (조건별 삭제 가능)사용 불가사용 불가
ROLLBACK가능 (트랜잭션 롤백 지원)불가능 (자동 Commit)불가능 (자동 Commit)
처리속도느림 (행 단위로 로그 기록 및 삭제)빠름 (데이터 저장 공간 할당 해제)빠름 (메타데이터 딕셔너리만 수정)
profile
HW + SW = 1

0개의 댓글