※ DDL (Data Definition Language)란?
DDL은 데이터베이스의 구조(스키마), 테이블, 인덱스, 뷰 등을 정의(Define)하고,
변경(Alter)하며, 삭제(Drop)하는 명령어입니다. 즉, 데이터를 저장할 "그릇"을 만드는 단계라고 볼 수 있습니다.
대표적인 DDL 명령어는 다음과 같습니다.
| 명령어 | 설명 |
|---|---|
| CREATE | 데이터베이스 객체(테이블, 인덱스 등) 생성 |
| ALTER | 객체의 구조를 수정 |
| DROP | 객체 삭제 |
| TRUNCATE | 테이블의 모든 데이터를 삭제 (구조는 유지) |
→ DDL은 COMMIT 없이 즉시 적용되며,
ROLLBACK으로 되돌릴 수 없습니다.
※ CREATE TABLE – 테이블 생성
CREATE TABLE은 새로운 테이블을 생성하는 명령어입니다.
각 열(column)에 대해 이름, 자료형, 제약 조건 등을 지정합니다.
→ 테이블 생성 시 자료형을 잘못 설정하면 검색 성능과 저장 공간 효율에 문제가 생기므로 주의해야 합니다.
※ ALTER TABLE – 테이블 구조 수정
ALTER TABLE은 기존 테이블의 구조를 변경할 때 사용합니다. 열 추가, 삭제, 이름 변경, 자료형 변경 등이 가능합니다.
-- 열 추가
ALTER TABLE student ADD phone VARCHAR(20);
-- 열 삭제
ALTER TABLE student DROP COLUMN email;
-- 열 자료형 변경
ALTER TABLE student MODIFY major VARCHAR(100);
-- 열 이름 변경 (MySQL)
ALTER TABLE student CHANGE name student_name VARCHAR(50);
→ ALTER 명령은 구조 자체를 변경하므로 주의 깊게 사용해야 하며,
대량의 데이터가 있는 경우 성능에 영향을 줄 수 있습니다.
※ DROP / TRUNCATE – 삭제 명령어
DROP과 TRUNCATE는 모두 데이터를 삭제하는 명령어이지만, 동작 방식이 다릅니다.
-- 테이블 삭제
DROP TABLE student;
-- 데이터만 삭제 (테이블 구조 유지)
TRUNCATE TABLE student;
→ DROP / TRUNCATE는 즉시 반영되고 복구할 수 없으므로 주의가 필요합니다.
※ 제약 조건(Constraint)이란?
제약 조건(Constraint)이란 테이블에 저장되는 데이터의 무결성(Integrity)을 보장하기 위해 설정하는 규칙입니다. 즉, 잘못된 데이터가 들어오는 것을 방지하고 데이터 품질을 유지합니다.
대표적인 제약 조건은 다음과 같습니다
| 제약 조건 | 설명 |
|---|---|
| NOT NULL | NULL 값을 허용하지 않음 |
| UNIQUE | 중복 값 허용 안 함 |
| PRIMARY KEY | 유일하며 NULL 불가 (NOT NULL + UNIQUE) |
| FOREIGN KEY | 다른 테이블의 기본키를 참조 |
| CHECK | 조건식 만족 시에만 데이터 허용 |
| DEFAULT | 값을 지정하지 않았을 때 기본값 설정 |
※ 제약 조건 예제
CREATE TABLE users (
user_id INT PRIMARY KEY, -- 기본키
username VARCHAR(50) UNIQUE, -- 중복 불가
email VARCHAR(100) NOT NULL, -- NULL 불가
age INT CHECK (age >= 0 AND age <= 120), -- 조건 검사
country VARCHAR(50) DEFAULT 'Korea' -- 기본값
);
CREATE TABLE orders (
order_id INT PRIMARY KEY,
user_id INT,
amount DECIMAL(10,2),
FOREIGN KEY (user_id) REFERENCES users(user_id) -- 외래키
);
→ 제약 조건을 통해 데이터의 정확성과 일관성을 확보할 수 있으며,
이는 서비스 품질과 직접 연결됩니다.
※ 제약 조건 관리 (추가/삭제)
-- 제약 조건 추가
ALTER TABLE users ADD CONSTRAINT chk_age CHECK (age >= 0);
-- 제약 조건 삭제
ALTER TABLE users DROP CONSTRAINT chk_age;
-- 외래키 추가
ALTER TABLE orders ADD CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES users(user_id);
-- 외래키 삭제
ALTER TABLE orders DROP FOREIGN KEY fk_user;
→ 제약 조건 이름은 자동으로 생성되기도 하지만,
직접 지정해두면 유지보수에 훨씬 유리합니다.
※ 이상 현상(Anomaly)과 정규화
데이터 구조를 설계할 때 제약 조건 외에도 정규화(Normalization)를 통해
데이터 중복과 이상 현상을 방지해야 합니다.
→ 정규화는 데이터 구조를 분리하고 관계를 설정함으로써 이상 현상을 해결합니다.
'2025 현대오토에버 모빌리티 SW 스쿨(클라우드 2기) > 데이터베이스' 카테고리의 다른 글
| [Database] NoSQL과 MongoDB 기본 (0) | 2025.10.07 |
|---|---|
| [Database] DML과 트랜잭션(TCL) (0) | 2025.10.07 |
| [Database] SQL 언어 완벽 정리 (3) – SubQuery와 Join (0) | 2025.10.07 |
| [Database] SQL 언어 완벽 정리 (2) – 함수와 GROUP BY (0) | 2025.10.07 |
| [Database] SQL 언어 완벽 정리 (1) – 개요 및 SELECT 기본 (0) | 2025.10.07 |