su-tudy 님의 블로그
CREATE, ALTER, DROP, RENAME, TRUNCATE 본문
𖤐 DDL 기본 명령어 이해하기
DDL은 데이터베이스와 테이블의 구조 자체를 만들고 바꾸고 지우는 명령어다. DML이 데이터를 다룬다면 DDL은 그 데이터를 담는 그릇을 다루는 것이다. 테이블을 만들 때 어떤 데이터 타입을 쓰는지도 같이 정리해 둔다.
𖤐 정리 노트
✧ CREATE - 생성
데이터베이스나 테이블을 새로 만들 때 사용한다.
-- 데이터베이스 생성
CREATE DATABASE database_name;
-- 테이블 생성
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
...
);
실제 예시로 보면 이렇다.
CREATE TABLE users (
id INT NOT NULL,
name VARCHAR(50) NOT NULL,
age INT,
email VARCHAR(100),
created DATE DEFAULT CURRENT_DATE()
);
▸기존 테이블 복사해서 생성
이 방식은 데이터는 복사되지만 제약조건(PK, FK 등)은 복사되지 않는다.
-- 기존 테이블 구조 + 데이터 복사
CREATE TABLE users_backup AS
SELECT *
FROM users;
-- 특정 컬럼만 복사
CREATE TABLE users_backup AS
SELECT id, name
FROM users
WHERE age >= 20;
✧ 데이터 타입
테이블 생성할 때 각 컬럼에 데이터 타입을 지정해야 한다. 자주 쓰는 것 위주로 정리했다.
▸ 문자열
| 타입 | 설명 |
CHAR(n) |
고정 길이 문자열. 항상 n자리 차지 |
VARCHAR(n) |
가변 길이 문자열. 최대 n자리까지 |
TEXT |
긴 문자열 (최대 65,535자) |
LONGTEXT |
매우 긴 문자열 |
CHAR vs VARCHAR: 고정된 길이의 데이터(ex: 주민번호, 코드값)는 CHAR, 길이가 제각각인 데이터(ex: 이름, 주소)는 VARCHAR를 쓰는 게 일반적이다.▸ 숫자
| 타입 | 설명 |
TINYINT |
정수 (-128 ~ 127) |
INT |
정수 (-2,147,483,648 ~ 2,147,483,647) |
BIGINT |
큰 정수 |
FLOAT |
부동소수점 (근사값) |
DOUBLE |
부동소수점 (더 큰 범위) |
DECIMAL(n, d) |
고정 소수점. n자리 중 d자리가 소수점 (정확한 값) |
BOOL / BOOLEAN |
0 또는 1 |
FLOAT 말고 DECIMAL을 써야 한다. FLOAT는 근사값이라 미세한 오차가 생길 수 있다.▸ 날짜 / 시간
| 타입 | 설명 |
DATE |
날짜만 (YYYY-MM-DD) |
TIME |
시간만 (HH:MM:SS) |
DATETIME |
날짜 + 시간 |
TIMESTAMP |
날짜 + 시간 (1970년 이후, 시간대 자동 적용) |
YEAR |
연도만 |
✧ ALTER - 구조 변경
기존 테이블의 컬럼을 추가, 삭제, 수정할 때 사용한다.
-- 컬럼 추가
ALTER TABLE table_name
ADD column_name datatype;
-- 컬럼 삭제
ALTER TABLE table_name
DROP COLUMN column_name;
-- 컬럼 수정 (타입 또는 제약조건 변경)
ALTER TABLE table_name
MODIFY COLUMN column_name datatype;
-- 예시: users 테이블에 phone 컬럼 추가
ALTER TABLE users
ADD phone VARCHAR(20);
-- age 컬럼 타입 변경
ALTER TABLE users
MODIFY COLUMN age TINYINT;
-- email 컬럼 삭제
ALTER TABLE users
DROP COLUMN email;
✧ RENAME - 이름 변경
테이블 이름을 바꿀 때 사용한다.
-- 방법 1
RENAME TABLE old_name TO new_name;
-- 방법 2
ALTER TABLE old_name RENAME TO new_name;
✧ DROP - 삭제
데이터베이스나 테이블 자체를 완전히 삭제한다. 구조와 데이터 모두 사라지며 ROLLBACK으로 복구 불가능하다.
-- 데이터베이스 삭제
DROP DATABASE database_name;
-- 테이블 삭제
DROP TABLE table_name;
-- 존재할 때만 삭제 (없으면 에러 안 남)
DROP TABLE IF EXISTS table_name;
✧ TRUNCATE - 데이터 초기화
테이블 구조는 유지하면서 데이터만 전부 지운다.
TRUNCATE TABLE table_name;
▸ DROP vs TRUNCATE vs DELETE 비교
셋 다 데이터를 지우는 것 같지만 동작이 완전히 다르다.
| DROP | TRUNCATE | DELETE | |
| 삭제 대상 | 테이블 구조 + 데이터 | 데이터 전체 | 조건에 맞는 데이터 |
| 테이블 구조 | 사라짐 | 유지 | 유지 |
| WHERE 사용 | ❌ | ❌ | ✅ |
| ROLLBACK | ❌ 불가 | ❌ 불가 | ✅ 가능 |
| 속도 | 빠름 | 빠름 | 상대적으로 느림 |
𖤐 체크포인트
🚨 주의 — DROP, TRUNCATE는 되돌릴 수 없음
DDL 명령어는 AUTO COMMIT이라 실행 즉시 반영되고 ROLLBACK이 안 된다. 특히 운영 DB에서 실수하면 복구가 불가능하니 항상 주의해야 한다
🚨 CHAR vs VARCHAR 선택 기준
길이가 항상 고정인 데이터 → CHARphone CHAR(11) -- 010-1234-5678 항상 11자리
길이가 다양한 데이터 → VARCHARname VARCHAR(50) -- 이름은 길이가 제각각
🚨 주의 — 컬럼 수정 시 기존 데이터 주의
VARCHAR(100)을 VARCHAR(10)으로 줄이면ALTER TABLE users MODIFY COLUMN name VARCHAR(10); → 기존에 10자 초과 데이터가 있으면 에러 or 잘릴 수 있음
𖤐 오늘의 한 줄 요약
CREATE로 만들고, ALTER로 수정하고, DROP으로 통째로 지우고, TRUNCATE로 데이터만 비운다. DROP과 TRUNCATE는 ROLLBACK이 안 되니 실행 전 항상 한 번 더 확인하자.
'DBMS > Part 3. DDL' 카테고리의 다른 글
| 제약조건 (Constraints) (0) | 2024.10.18 |
|---|