DDL(Data Definition Language) 은
데이터 자체가 아니라 데이터의 구조(스키마) 를 정의·변경·삭제하는 SQL이다.
| 분류 | 명령 |
|---|---|
| 생성 | CREATE |
| 변경 | ALTER |
| 삭제 | DROP |
| 초기화 | TRUNCATE |
| 구분 | DDL | DML |
|---|---|---|
| 대상 | 구조(스키마) | 데이터(행) |
| 트랜잭션 | ❌ (자동 커밋) | ⭕ |
| 롤백 | ❌ | ⭕ |
| 위험도 | 매우 높음 | 높음 |
| 운영 영향 | 큼 | 중~큼 |
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
);
예시)
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
) ;
UNIQUE: 중복 불가CHECK: 값 제한
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
) ;
ALTER TABLE customers
ADD COLUMN last_login_at DATETIME;
ALTER TABLE products
MODIFY COLUMN price BIGINT NOT NULL;
⚠️ 주의:
ALTER TABLE customers
CHANGE phone phone_number VARCHAR(30);
ALTER TABLE orders
ADD CONSTRAINT chk_total_amount
CHECK (total_amount >= 0);
DROP TABLE coupons;
DROP DATABASE bootcamp_shop;
TRUNCATE TABLE order_items;
| 항목 | DELETE | TRUNCATE |
|---|---|---|
| WHERE | ⭕ | ❌ |
| 롤백 | ⭕ | ❌ |
| 속도 | 느림 | 빠름 |
| 로그 | 남음 | 거의 없음 |
| 실무 사용 | ⭕ | 제한적 |
START TRANSACTION;
ALTER TABLE customers ADD COLUMN test INT;
ROLLBACK;
DDL은:
자동 COMMIT
실행 즉시 반영