본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
SQL 기초: 데이터 정의 언어(DDL) - CREATE, ALTER, DROP 활용법 🏗️

안녕하세요! 🌟
지난 시간에는 데이터베이스의 꽃, DML(Data Manipulation Language)에 대해 알아보았는데요, 데이터를 조작하기 전에 먼저 그 데이터를 담을 그릇, 즉 데이터베이스 구조를 정의해야겠죠? 오늘 바로 그 역할을 하는 DDL(Data Definition Language, 데이터 정의 언어)에 대해 깊이 파고들어 보겠습니다!
DDL은 테이블, 인덱스, 뷰 등 데이터베이스 객체의 구조를 정의, 수정, 삭제하는 데 사용되는 명령어들입니다. 건물을 짓기 전에 설계도가 필요한 것처럼, DDL은 데이터베이스의 청사진을 그리는 역할을 합니다.
이번 시간에는 DDL의 핵심 명령어인 CREATE TABLE, ALTER TABLE, DROP TABLE을 중심으로 DDL의 정의와 사용 시 주의점까지 함께 살펴보겠습니다. 준비되셨나요? 시작하겠습니다! 🚀

🏛️ 데이터 정의 언어(DDL)란 무엇일까요?
DDL(Data Definition Language)은 말 그대로 데이터를 정의하는 언어입니다. 데이터베이스 시스템에게 '이런 구조의 테이블을 만들어줘', '이 테이블의 컬럼을 이렇게 바꿔줘', '이 테이블은 이제 필요 없으니 삭제해줘' 와 같이 데이터베이스 객체의 구조를 생성(CREATE), 변경(ALTER), 삭제(DROP)하는 명령을 내릴 때 사용됩니다.
주요 DDL 명령어는 다음과 같습니다:
- CREATE: 새로운 데이터베이스 객체 (테이블, 인덱스, 뷰 등)를 생성합니다.
- ALTER: 기존 데이터베이스 객체의 구조를 수정합니다.
- DROP: 기존 데이터베이스 객체를 삭제합니다.
- (TRUNCATE: 테이블의 모든 데이터를 빠르게 삭제하지만, 테이블 구조는 남겨둡니다. DML의 DELETE와 유사하지만 작동 방식과 속도에 차이가 있습니다. 오늘은 주로 앞의 세 가지에 집중할게요!)
🛠️ 테이블 생성: CREATE TABLE로 뼈대 세우기
CREATE TABLE 문은 데이터베이스에 새로운 테이블을 만드는 데 사용됩니다. 테이블을 생성할 때는 각 컬럼의 이름, 데이터 타입, 그리고 필요에 따라 제약 조건(Constraints) 등을 지정해야 합니다.
📌 기본 문법:
CREATE TABLE 테이블명 (
컬럼명1 데이터타입 [제약조건],
컬럼명2 데이터타입 [제약조건],
컬럼명3 데이터타입 [제약조건],
...
[테이블 레벨 제약조건]
);
- 데이터타입 예시: INT (정수), VARCHAR(n) (가변 길이 문자열), CHAR(n) (고정 길이 문자열), DATE (날짜), DATETIME (날짜 및 시간), DECIMAL(p,s) (고정 소수점 숫자) 등
- 주요 제약조건 예시:
- NOT NULL: 해당 컬럼에 NULL 값을 허용하지 않음.
- UNIQUE: 해당 컬럼의 모든 값이 유일해야 함.
- PRIMARY KEY: 테이블의 기본 키로, NOT NULL과 UNIQUE 특성을 모두 가짐.
- FOREIGN KEY: 다른 테이블의 기본 키를 참조하여 테이블 간의 관계를 정의함.
- DEFAULT 값: 명시적으로 값이 제공되지 않을 경우 사용될 기본값.
- AUTO_INCREMENT (MySQL 기준): 새로운 행이 추가될 때마다 자동으로 1씩 증가하는 값을 가짐 (주로 PRIMARY KEY와 함께 사용).
✨ MySQL 예시 (새로운 employees 테이블 생성):
간단한 직원 정보를 담을 employees 테이블을 만들어 봅시다.
CREATE TABLE employees (
employee_id INT AUTO_INCREMENT PRIMARY KEY, -- 직원 ID (자동 증가, 기본 키)
first_name VARCHAR(50) NOT NULL, -- 이름
last_name VARCHAR(50) NOT NULL, -- 성
email VARCHAR(100) UNIQUE, -- 이메일 (고유해야 함)
phone_number VARCHAR(20), -- 전화번호
hire_date DATE NOT NULL, -- 입사일
job_id VARCHAR(10), -- 직무 ID
salary DECIMAL(8, 2), -- 급여
department_id INT, -- 부서 ID
created_at DATETIME DEFAULT CURRENT_TIMESTAMP -- 생성일시 (기본값: 현재 시간)
);
위 명령을 실행하면 employees라는 이름의 새로운 테이블이 데이터베이스에 생성됩니다. DESC employees; 명령으로 구조를 확인할 수 있어요!

✏️ 테이블 수정: ALTER TABLE로 구조 변경하기
ALTER TABLE 문은 이미 존재하는 테이블의 구조를 변경할 때 사용됩니다. 컬럼을 추가하거나, 기존 컬럼의 데이터 타입이나 제약 조건을 변경하거나, 컬럼을 삭제하는 등의 작업을 할 수 있습니다.
📌 기본 문법 (주요 작업별):
- 컬럼 추가 (ADD COLUMN):
ALTER TABLE 테이블명 ADD COLUMN 컬럼명 데이터타입 [제약조건] [AFTER 기존컬럼명 | FIRST]; - 컬럼 수정 (MODIFY COLUMN / ALTER COLUMN):
(MySQL에서는 MODIFY COLUMN, 다른 DBMS에서는 ALTER COLUMN을 사용하기도 합니다)-- MySQL 예시 ALTER TABLE 테이블명 MODIFY COLUMN 컬럼명 새로운_데이터타입 [새로운_제약조건]; - 컬럼 삭제 (DROP COLUMN):
ALTER TABLE 테이블명 DROP COLUMN 컬럼명; - 컬럼 이름 변경 (RENAME COLUMN / CHANGE COLUMN):
(MySQL에서는 CHANGE COLUMN, 다른 DBMS에서는 RENAME COLUMN을 사용하기도 합니다)-- MySQL 예시 ALTER TABLE 테이블명 CHANGE COLUMN 기존컬럼명 새로운컬럼명 새로운_데이터타입 [새로운_제약조건]; - 테이블 이름 변경 (RENAME TABLE):
ALTER TABLE 기존테이블명 RENAME TO 새로운테이블명;
✨ MySQL 예시 (employees 테이블 수정):
- employees 테이블에 address 컬럼 추가:
ALTER TABLE employees ADD COLUMN address VARCHAR(255) AFTER phone_number; -- phone_number 컬럼 뒤에 추가 - employees 테이블의 job_id 컬럼의 데이터 타입을 VARCHAR(20)으로 변경:
ALTER TABLE employees MODIFY COLUMN job_id VARCHAR(20); - employees 테이블에 임시로 추가했던 temp_notes 컬럼 삭제 (만약 있었다면):
-- 먼저 임시 컬럼을 추가했다고 가정 -- ALTER TABLE employees ADD COLUMN temp_notes TEXT; -- 이제 삭제 ALTER TABLE employees DROP COLUMN temp_notes; -- 이 예시에서는 temp_notes가 없으므로, 실제로 실행하려면 먼저 추가해야 합니다. - employees 테이블의 salary 컬럼 이름을 monthly_salary로 변경하고 타입도 유지:
ALTER TABLE employees CHANGE COLUMN salary monthly_salary DECIMAL(8, 2); - employees 테이블 이름을 staff로 변경:(테이블 이름이 staff로 변경되었으니, 이후 예시는 staff를 기준으로 해야 합니다. 여기서는 설명을 위해 다시 employees로 돌려놓았다고 가정하고 진행하겠습니다.)
ALTER TABLE employees RENAME TO staff;
🗑️ 테이블 삭제: DROP TABLE로 완전히 제거하기
DROP TABLE 문은 테이블의 구조와 그 안의 모든 데이터를 영구적으로 삭제합니다.
⚠️ 매우 중요: DROP TABLE은 실행 취소가 매우 어렵거나 불가능한 작업입니다. 테이블을 삭제하면 그 안에 저장된 모든 데이터가 사라지므로, 매우 신중하게 사용해야 합니다. 중요한 데이터를 실수로 삭제하지 않도록 각별히 주의하세요!
📌 기본 문법:
DROP TABLE [IF EXISTS] 테이블명;
- IF EXISTS: 만약 해당 테이블이 존재할 경우에만 삭제를 시도합니다. 테이블이 없어도 오류가 발생하지 않게 합니다.
✨ MySQL 예시 (앞서 만든 employees 테이블 삭제):
만약 employees 테이블이 더 이상 필요 없다면, 다음과 같이 삭제할 수 있습니다.
DROP TABLE IF EXISTS employees;
이 명령을 실행하면 employees 테이블과 그 안의 모든 데이터가 데이터베이스에서 완전히 제거됩니다.
🚨 DDL 사용 시 주의사항!
DDL 명령어는 데이터베이스의 구조를 직접 건드리기 때문에 사용할 때 몇 가지 주의해야 할 점이 있습니다:
- 자동 커밋 (Auto-commit): 대부분의 데이터베이스 시스템에서 DDL 명령어는 실행 즉시 자동으로 커밋(변경 사항 영구 저장)됩니다. 즉, ROLLBACK으로 되돌리기가 어렵습니다. (DML의 경우 TRANSACTION을 사용하여 COMMIT 또는 ROLLBACK을 명시적으로 제어할 수 있는 것과 대조적입니다.)
- 실행 취소 불가: DROP TABLE이나 ALTER TABLE DROP COLUMN과 같은 명령어는 실행하면 되돌리기 매우 어렵습니다. 항상 실행 전에 명령어를 재확인하세요.
- 데이터 유실 위험: 특히 DROP TABLE이나 컬럼 삭제 시에는 데이터가 영구적으로 손실될 수 있습니다. 백업이 되어 있는지 확인하거나, 정말 삭제해도 되는지 신중히 검토해야 합니다.
- 잠금 (Locking): ALTER TABLE과 같은 명령어는 실행되는 동안 해당 테이블이나 관련된 객체에 잠금(Lock)을 걸 수 있습니다. 이로 인해 다른 작업들이 대기 상태에 빠지거나 시스템 성능에 영향을 줄 수 있으므로, 사용량이 적은 시간에 실행하는 것이 좋습니다.
- 신중한 계획 및 설계: 테이블 구조는 데이터베이스의 기본 뼈대입니다. 처음 설계할 때 신중하게 계획하고, 변경이 필요할 때는 그 파급 효과를 충분히 고려해야 합니다.
- 테스트 환경에서 충분히 검증: 운영 환경에 DDL을 적용하기 전에는 반드시 개발 환경이나 테스트 환경에서 동일한 명령을 실행해보고 문제점은 없는지, 예상대로 동작하는지 충분히 검증해야 합니다.
🏁 정리하며: DDL, 데이터 건축하기!
오늘은 SQL의 DDL을 통해 데이터베이스 객체의 구조를 정의하는 세 가지 핵심 명령어, CREATE TABLE, ALTER TABLE, DROP TABLE에 대해 알아보았습니다.
- CREATE TABLE: 새로운 테이블의 설계도를 그리고 생성합니다.
- ALTER TABLE: 기존 테이블의 구조를 필요에 맞게 수정합니다.
- DROP TABLE: 더 이상 사용하지 않는 테이블을 데이터와 함께 완전히 삭제합니다.
이 DDL 명령어들은 데이터베이스의 기초를 다지는 매우 강력하고 중요한 도구들입니다. 특히 구조를 변경하거나 삭제하는 작업은 데이터 유실의 위험이 따르므로, 항상 신중하게 계획하고 검토한 후 실행해야 한다는 점을 꼭 기억해주세요!
오늘도 SQL의 뼈대를 세우는 DDL 지식을 쌓으시느라 정말 수고 많으셨습니다! 👍 이 명령어들을 통해 여러분의 데이터베이스를 더욱 체계적으로 관리할 수 있게 될 거예요.

오늘도 정말 수고 많으셨어요!
그럼 다음 시간에는 또 다른 SQL의 중요한 개념으로 여러분을 찾아뵙겠습니다! 👋
'데이터 엔지니어링' 카테고리의 다른 글
| 패스트캠퍼스 환급챌린지 60일차: 데이터엔지니어링 초격차 강의 후기 (0) | 2025.05.30 |
|---|---|
| 패스트캠퍼스 환급챌린지 59일차: 데이터엔지니어링 초격차 강의 후기 (1) | 2025.05.29 |
| 패스트캠퍼스 환급챌린지 57일차: 데이터엔지니어링 초격차 강의 후기 (0) | 2025.05.28 |
| 패스트캠퍼스 환급챌린지 56일차: 데이터엔지니어링 초격차 강의 후기 (0) | 2025.05.26 |
| 패스트캠퍼스 환급챌린지 55일차: 데이터엔지니어링 초격차 강의 후기 (1) | 2025.05.25 |