IT이야기/데이터베이스

DDL(데이터 정의 언어): 데이터베이스 구조를 정의하고 관리하는 핵심 SQL 명령어

Chiba-in 2025. 2. 28. 05:10

🔹 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되므로, 중요한 데이터 삭제 시 신중하게 사용해야 한다.