su-tudy 님의 블로그

CREATE, ALTER, DROP, RENAME, TRUNCATE 본문

DBMS/Part 3. DDL

CREATE, ALTER, DROP, RENAME, TRUNCATE

su-tudy 2024. 10. 12. 22:56

 

𖤐 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 선택 기준

길이가 항상 고정인 데이터 → CHAR
phone CHAR(11) -- 010-1234-5678 항상 11자리
길이가 다양한 데이터 → VARCHAR
name 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