[Database] MySQL 실습(6) - DDL : CREATE, ALTER, DROP, TRUNCATE

우유·2026년 2월 3일

[Cloud] Database

목록 보기
9/28

6. DDL : CREATE, ALTER, DROP, TRUNCATE

1) DDL이란?

DDL(Data Definition Language) 은

데이터 자체가 아니라 데이터의 구조(스키마) 를 정의·변경·삭제하는 SQL이다.

분류명령
생성CREATE
변경ALTER
삭제DROP
초기화TRUNCATE
  • DDL은 “데이터의 틀”을 바꾼다. → 영향 범위가 크다

2) DDL vs DML

구분DDLDML
대상구조(스키마)데이터(행)
트랜잭션❌ (자동 커밋)
롤백
위험도매우 높음높음
운영 영향중~큼
  • DDL은 실행 순간 확정

3) CREATE : 구조 생성

3-1) 테이블 생성 (기본형)

CREATE TABLE 테이블 명 (
  기본키(id) BIGINT PRIMARY KEY AUTO_INCREMENT,VARCHAR(50) NOT NULL, // 키 value타입 제약조건
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);

예시)

CREATE TABLE categories (
  category_id BIGINT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(50) NOT NULL,
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);

3-2) 제약조건 포함 CREATE

예시)

CREATE TABLE coupons (
  coupon_id BIGINT PRIMARY KEY AUTO_INCREMENT,
  code VARCHAR(50) NOT NULL UNIQUE,
  discount_rate INT NOT NULL CHECK (discount_rate BETWEEN 1 AND 100),
  expires_at DATETIME
) ;
  • CREATE 시 제약조건을 넣는 것이 가장 안전
  • UNIQUE : 중복 불가
  • CHECK : 값 제한

3-3) 외래키(FK) 포함 CREATE

CONSTRAINT 제약 이름
    FOREIGN KEY (외래키로 사용할 key)
    REFERENCES 참조할 테이블명(참조할 key)
    ON DELETE CASCADE (or RESTRICT)

에시)

CREATE TABLE reviews (
  review_id BIGINT PRIMARY KEY AUTO_INCREMENT,
  product_id BIGINT NOT NULL,
  rating INT NOT NULL CHECK (rating BETWEEN 1 AND 5),
  comment TEXT,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  CONSTRAINT fk_reviews_product
    FOREIGN KEY (product_id)
    REFERENCES products(product_id)
    ON DELETE CASCADE
) ;
  • 관계 정의는 DDL에서 결정

4) ALTER TABLE: 구조 변경


4-1) 컬럼 추가 (ADD COLUMN)

ALTER TABLE customers
ADD COLUMN last_login_at DATETIME;

4-2) 컬럼 수정 (MODIFY COLUMN)

ALTER TABLE products
MODIFY COLUMN price BIGINT NOT NULL;

⚠️ 주의:

  • 데이터 타입 변경
  • 데이터 손실 가능성
  • 대량 테이블은 장애 유발

4-3) 컬럼 이름 변경 (CHANGE)

ALTER TABLE customers
CHANGE phone phone_number VARCHAR(30);

4-4) 제약조건 추가 (ADD CONSTRAINT)

ALTER TABLE orders
ADD CONSTRAINT chk_total_amount
CHECK (total_amount >= 0);

5) DROP : 구조 삭제

5-1) 테이블 삭제 (DROP TABLE)

DROP TABLE coupons;
  • 데이터 + 구조 완전 삭제
  • 복구 불가 (백업 없으면 끝)

5-2) 데이터베이스 삭제 (DROP DATABASE)

DROP DATABASE bootcamp_shop;

6) TRUNCATE : 테이블 초기화 (TRUNCATE TABLE)

TRUNCATE TABLE order_items;
항목DELETETRUNCATE
WHERE
롤백
속도느림빠름
로그남음거의 없음
실무 사용제한적

7) DDL과 트랜잭션

START TRANSACTION;
ALTER TABLE customers ADD COLUMN test INT;
ROLLBACK;
  • DDL은 롤백되지 않는다
    • 입력되는 즉시 commit
  • DDL은:

      자동 COMMIT
    
      실행 즉시 반영
profile
Front-end Developer, Cloud Engineer

0개의 댓글