[DB] Basic SQL (1) - DDL

likell1·2026년 9월 27일

DB

목록 보기
4/6

DDL (Data Definition Language)

SQL의 데이터 정의어(DDL) 로 릴레이션에 대한 정보를 명세한다.

  • 각 관계의 schema
  • 각 속성에 연관된 값들의 domain
  • Integrity constraints (무결성 제약조건)
    • 예: 학점의 허용 범위, 음수가 될 수 없는 급여 등 데이터 정합성을 위한 조건

1. SQL의 Domain Types

타입설명
char(n)고정 길이 문자열, 길이 n을 사용자가 지정
varchar(n)가변 길이 문자열, 최대 길이 n
int정수
smallint작은 정수
numeric(p, d)고정 소수점 수. 전체 p자리, 그중 소수점 오른쪽 d자리
real부동 소수점 수
float(n)부동 소수점 수, 최소 n자리 정밀도

예: numeric(8,2) → 총 8자리, 소수점 이하 2자리 (예: 123456.78)

  • char(n)은 고정 길이, varchar(n)은 실제 문자열 길이에 따라 더 유연하게 저장한다.
    근래에는 큰 이슈는 아니지만, 저장 공간이 귀했던 시기에는 이 차이가 특히 중요했다
  • int와 smallint는 표현 가능한 정수 범위와 필요한 저장 공간이 다르다.
    필요한 범위가 작으면 더 작은 타입을 선택할 수 있다.
  • real, float(n)은 근삿값을 표현하는 부동 소수점 타입이고, numeric(p,d)는 자릿수가 정해진 정확한 고정 소수점 값에 적합하다.

2. Create Table Construct

CREATE는 테이블을 생성하는 SQL 명령어이다.

정의

create table r (A1 D1, A2 D2, ..., An Dn,
                (integrity-constraint1),
                ...,
                (integrity-constraintk))
  • r : 릴레이션 이름
  • Ai : 릴레이션 r의 스키마에 있는 속성 이름
  • Di : 속성 Ai의 도메인(데이터 타입)

예시

create table instructor (
    ID          char(5),
    name        varchar(20) not null,
    dept_name   varchar(20),
    salary      numeric(8,2),
    primary key (ID));
insert into instructor values ('10211', 'Smith', 'Biology', 66000);
insert into instructor values ('10211', null,    'Biology', 66000);  -- name이 not null 이므로 오류

두 번째 insert는 name varchar(20) not null 제약 위반 → 거부됨.


3. Integrity Constraints in Create Table

  • not null — 해당 속성에 null 값을 허용하지 않음
  • primary key (A1, ..., An) — 기본키. (암묵적으로 not null + 유일)
  • foreign key (Am, ..., An) references r — 외래키. 다른 관계 r을 참조

외래키 값은 참조 대상 관계에 실제로 존재해야 한다.

  • 즉, 외래키는 다른 테이블의 기본키 또는 후보키이어야 한다.
  • 예를 들어 instructor.dept_name이 department를 참조한다면, department에 없는 학과 이름을 넣는 SQL은 거부된다.

예시 — dept_name 을 department의 기본키로 두고 참조

create table instructor (
    ID          char(5),
    name        varchar(20) not null,
    dept_name   varchar(20),
    salary      numeric(8,2),
    primary key (ID),
    foreign key (dept_name) references department);

추가 예시 — student 관계 정의

create table student (
    ID          varchar(5),
    name        varchar(20) not null,
    dept_name   varchar(20),
    tot_cred    numeric(3,0),
    primary key (ID),
    foreign key (dept_name) references department);

4. 테이블 수정 및 삭제

Insert

insert into instructor values ('10211', 'Smith', 'Biology', 66000);

INSERT는 해당 테이블에 튜플을 추가하는 명령어이다.

Delete

delete from student;    -- student 테이블의 모든 튜플 삭제

DELETE는 해당 테이블의 모든 튜플을 삭제하는 명령어이다.

Drop Table

drop table r;           -- 릴레이션(테이블) 자체(스키마 포함)를 삭제

DROP 은 릴레이션(테이블) 자체(스키마 포함)를 삭제한다.

Alter

alter table r add A D;  -- 속성 A(도메인 D)를 관계 r에 추가
alter table r drop A;   -- 속성 A를 제거

ALTER는 기존 릴레이션에 속성을 추가할 때 사용하는 명령어이다.

  • add 시 기존 튜플들의 새 속성 값은 모두 null 이 된다.
  • drop(속성 제거)은 많은 DBMS가 지원하지 않는다.

참고사항

delete 는 튜플만 삭제하고 테이블 스키마는 남긴다.
drop은 테이블 자체를 제거한다.
alter 로 속성을 추가하면 기존 튜플의 새 속성값은 null이 된다.


Reference:
Database System Concept-7th Edition
건국대학교 김욱희 교수님 - Database 수업

profile
Data Engineer/ML Engineer

0개의 댓글