DDL(데이터 정의 언어): 데이터베이스 구조를 정의하고 관리하는 핵심 SQL 명령어
🔹 DDL(데이터 정의 언어)란?
1. DDL의 정의
DDL(Data Definition Language, 데이터 정의 언어)은 데이터베이스의 구조(스키마)를 정의하고 관리하는 SQL 명령어 집합입니다.
DDL은 테이블, 인덱스, 뷰, 트리거 등 데이터베이스 객체의 생성, 수정 및 삭제를 수행하며, 데이터의 물리적 저장 구조를 결정합니다.
✅ DDL의 주요 기능:
- 데이터베이스와 테이블 생성 및 수정
- 테이블의 구조를 변경하거나 삭제
- 인덱스 및 뷰를 생성하여 데이터 검색 성능 향상
- 사용자 권한을 설정하여 데이터 보안을 강화
📌 DDL은 관계형 데이터베이스(RDBMS)에서 필수적으로 사용되며, 테이블 및 데이터 구조를 설계할 때 중요한 역할을 함
🔹 DDL의 주요 명령어
DDL에는 데이터베이스 객체(테이블, 인덱스, 뷰 등)의 생성(Create), 수정(Alter), 삭제(Drop, Truncate) 기능이 포함됩니다.
✅ 1. CREATE – 데이터베이스 객체 생성
- 새로운 데이터베이스, 테이블, 인덱스, 뷰, 트리거 등을 생성하는 명령어
- 스키마를 정의하고 데이터의 구조를 설정
✔️ 데이터베이스 생성:
CREATE DATABASE myDatabase;
✔️ 테이블 생성:
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
Name VARCHAR(100) NOT NULL,
Email VARCHAR(100) UNIQUE,
Phone VARCHAR(15),
CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
✔️ 인덱스 생성:
CREATE INDEX idx_email ON Customers(Email);
✔️ 뷰(View) 생성:
CREATE VIEW CustomerOrders AS
SELECT Customers.Name, Orders.OrderID, Orders.Product
FROM Customers
JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
📌 CREATE 문을 사용하여 데이터베이스 객체를 생성하고, 효율적인 데이터 관리를 위한 인덱스 및 뷰를 정의할 수 있음
✅ 2. ALTER – 테이블 및 데이터베이스 객체 수정
- 기존 테이블의 구조를 변경하는 명령어
- 컬럼 추가, 수정, 삭제 및 제약 조건 변경 가능
✔️ 컬럼 추가:
ALTER TABLE Customers ADD COLUMN Address VARCHAR(255);
✔️ 컬럼 데이터 타입 변경:
ALTER TABLE Customers MODIFY COLUMN Phone VARCHAR(20);
✔️ 컬럼 삭제:
ALTER TABLE Customers DROP COLUMN Address;
✔️ 기본 키 추가:
ALTER TABLE Customers ADD CONSTRAINT pk_customer PRIMARY KEY (CustomerID);
📌 ALTER 문을 사용하면 기존 테이블을 재구성하여 데이터 구조를 변경할 수 있으며, 기존 데이터를 유지하면서 유연한 스키마 변경이 가능함
✅ 3. DROP – 데이터베이스 객체 삭제
- 데이터베이스, 테이블, 인덱스, 뷰 등을 삭제하는 명령어
- 데이터와 테이블 구조 모두 제거됨(복구 불가 주의!)
✔️ 테이블 삭제:
DROP TABLE Customers;
✔️ 데이터베이스 삭제:
DROP DATABASE myDatabase;
✔️ 인덱스 삭제:
DROP INDEX idx_email ON Customers;
✔️ 뷰 삭제:
DROP VIEW CustomerOrders;
📌 DROP 문은 데이터 구조를 완전히 삭제하므로, 사용 시 주의가 필요함!
✅ 4. TRUNCATE – 테이블 데이터 초기화
- 테이블의 모든 데이터를 삭제하지만, 테이블 구조는 유지
- DELETE 문보다 빠르게 데이터를 삭제하며, 트랜잭션을 지원하지 않음
✔️ 테이블 초기화:
TRUNCATE TABLE Customers;
📌 TRUNCATE는 테이블을 초기 상태로 만들 때 유용하지만, 데이터를 복구할 수 없기 때문에 신중하게 사용해야 함
🔹 DDL을 활용한 실무 사례
1. 전자상거래 시스템에서 주문 테이블 생성
📌 활용:
- 고객 주문 정보를 저장하는 테이블을 생성하고, 데이터 무결성을 유지하는 제약 조건 추가
✔️ SQL 코드:
CREATE TABLE Orders (
OrderID INT PRIMARY KEY AUTO_INCREMENT,
CustomerID INT NOT NULL,
Product VARCHAR(255) NOT NULL,
Quantity INT CHECK (Quantity > 0),
OrderDate TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
2. 성능 최적화를 위한 인덱스 추가
📌 활용:
- 고객 이메일을 자주 검색하는 경우, 이메일 컬럼에 인덱스를 추가하여 검색 속도를 향상
✔️ SQL 코드:
CREATE INDEX idx_email ON Customers(Email);
3. 테이블 구조 변경 및 제약 조건 수정
📌 활용:
- 고객 정보 테이블에 주소(Address) 컬럼 추가 및 전화번호(Phone) 컬럼 데이터 타입 변경
✔️ SQL 코드:
ALTER TABLE Customers ADD COLUMN Address VARCHAR(255);
ALTER TABLE Customers MODIFY COLUMN Phone VARCHAR(20);
4. 불필요한 데이터 및 테이블 삭제
📌 활용:
- 이전 데이터 마이그레이션 후, 더 이상 필요하지 않은 임시 테이블 제거
✔️ SQL 코드:
DROP TABLE TempOrders;
🔹 DDL과 트랜잭션 관리
DDL 명령어는 일반적으로 트랜잭션 관리(TCL: Transaction Control Language)와 함께 사용할 수 없음
✔️ 즉, DDL 명령어 실행 후에는 자동으로 COMMIT이 수행됨
예를 들어, 다음과 같은 트랜잭션을 실행하면 ROLLBACK이 불가능
BEGIN TRANSACTION;
DROP TABLE Customers;
ROLLBACK; -- 실행되지 않음
📌 테이블을 삭제하기 전에 반드시 백업을 수행하는 것이 중요함!
📌 결론
✅ DDL(데이터 정의 언어)은 데이터베이스의 구조를 정의하고 관리하는 핵심 SQL 명령어 집합이다.
✅ CREATE, ALTER, DROP, TRUNCATE 등의 명령어를 사용하여 테이블, 인덱스 및 뷰를 생성, 수정 및 삭제할 수 있다.
✅ 데이터 무결성을 유지하고 성능을 최적화하기 위해 적절한 제약 조건과 인덱스를 설정하는 것이 중요하다.
✅ DDL은 자동으로 COMMIT되므로, 중요한 데이터 삭제 시 신중하게 사용해야 한다.