DDL(Data Definition Language)

mskimdev·2026년 4월 7일

MySQL

목록 보기
5/20
post-thumbnail

DDL — 테이블을 정의하는 명령어

SQL 명령어는 크게 세 가지로 나뉜다. 테이블 구조를 정의하는 DDL, 데이터를 다루는 DML, 권한을 관리하는 DCL. 이번 글은 그 첫 번째, DDL(Data Definition Language)이다.

DDL은 데이터를 넣기 전에 "어떤 형태로 저장할지"를 먼저 정하는 명령어다. 건물을 짓기 전에 설계도를 그리는 것과 비슷하다.


CREATE — 테이블 만들기

가장 먼저 쓰게 되는 명령어다. 테이블의 이름과, 어떤 컬럼이 있는지, 각 컬럼의 타입이 뭔지를 정의한다.

CREATE TABLE members (
    member_id   INT,
    member_name VARCHAR(50),
    email       VARCHAR(100),
    created_at  DATE
);

각 컬럼 옆에 붙는 INT, VARCHAR(50), DATE 같은 것들이 데이터 타입이다. 이 컬럼에 어떤 종류의 값이 들어올 수 있는지를 미리 정해두는 것이다.

자주 쓰는 타입만 정리하면 이 정도다.

타입설명예시
INT정수나이, ID
VARCHAR(n)최대 n자 문자열이름, 이메일
TEXT긴 문자열상품 설명, 본문
DATE날짜 (YYYY-MM-DD)가입일, 주문일
DATETIME날짜 + 시간로그인 시각
DECIMAL(p, s)소수점 포함 숫자가격, 할인율

PRIMARY KEY

테이블에는 각 행을 구분할 수 있는 고유한 값이 필요하다. 이걸 기본 키(Primary Key)라고 한다. 같은 값이 두 번 들어올 수 없고, NULL도 허용되지 않는다.

CREATE TABLE members (
    member_id   INT PRIMARY KEY,
    member_name VARCHAR(50),
    email       VARCHAR(100)
);

AUTO_INCREMENT를 붙이면 행이 추가될 때마다 숫자가 자동으로 1씩 올라간다. 직접 ID 값을 넣지 않아도 된다.

CREATE TABLE members (
    member_id   INT PRIMARY KEY AUTO_INCREMENT,
    member_name VARCHAR(50),
    email       VARCHAR(100)
);

NOT NULL

값이 반드시 있어야 하는 컬럼엔 NOT NULL을 붙인다. 이름 없이 회원 가입이 되면 곤란하니까.

CREATE TABLE members (
    member_id   INT PRIMARY KEY AUTO_INCREMENT,
    member_name VARCHAR(50)  NOT NULL,
    email       VARCHAR(100) NOT NULL
);


ALTER — 테이블 구조 바꾸기

테이블을 만들고 나서 컬럼을 추가하거나 수정해야 할 때 쓴다.

컬럼 추가

-- members 테이블에 phone 컬럼 추가
ALTER TABLE members ADD phone VARCHAR(20);

컬럼 타입 변경

-- phone 컬럼의 타입을 변경
ALTER TABLE members MODIFY phone VARCHAR(30);

컬럼 삭제

ALTER TABLE members DROP COLUMN phone;

테이블 이름 변경

ALTER TABLE members RENAME TO users;

DROP — 테이블 삭제

테이블 자체를 완전히 삭제한다. 안에 있던 데이터도 전부 사라진다.

DROP TABLE members;

되돌릴 수 없다. 실수로 날리면 복구 방법이 없으니 신중하게 써야 한다.

테이블이 없을 때 오류가 나는 게 싫다면 IF EXISTS를 붙인다.

DROP TABLE IF EXISTS members;

TRUNCATE — 데이터만 전부 지우기

테이블 구조는 그대로 두고, 안에 있는 데이터만 전부 비운다.

TRUNCATE TABLE members;

DROP은 테이블 자체를 없애는 거고, TRUNCATE는 테이블은 남기고 내용물만 비우는 차이가 있다.


정리

명령어하는 일
CREATE테이블 생성
ALTER테이블 구조 변경 (컬럼 추가/수정/삭제)
DROP테이블 삭제 (데이터 포함)
TRUNCATE테이블 내용만 삭제 (구조 유지)

DDL은 데이터를 넣기 전에 틀을 잡는 작업이다. 한번 잘못 설계하면 나중에 고치는 게 꽤 번거로워서, 처음에 컬럼 타입이나 제약 조건을 꼼꼼히 정해두는 게 좋다.


profile
<- 개발 공부하는 나

0개의 댓글