IT 공부방 [기본지식 정리]/데이터베이스 (DB)
101. [MySQL] DDL - 데이터 정의 언어
cTosMaster
2025. 5. 23. 14:45
1. CREATE
새 데이터베이스/테이블/인덱스/뷰/프로시저/트리거 등을 "생성"할 때 사용됨.
-- 데이터베이스 생성
CREATE DATABASE mydb;
-- 테이블 생성
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
email VARCHAR(100)
);
-- 인덱스 생성
CREATE INDEX idx_name ON users(name);
-- 뷰 생성
CREATE VIEW active_users AS
SELECT * FROM users WHERE status = 'active';
-- 저장 프로시저 생성
CREATE PROCEDURE GetUserCount()
BEGIN
SELECT COUNT(*) FROM users;
END;
2. ALTER
기존 테이블 구조/컬럼 이름/컬럼 데이터 타입/인덱스 추가, 제거/테이블 이름 "변경"할 때 사용됨.
-- 컬럼 추가
ALTER TABLE users ADD COLUMN age INT;
-- PK 제약조건추가 후에 컬럼 반영
ALTER TABLE TEST_EMP ADD CONSTRAINT PK_TEST_EMP PRIMARY KEY (EMPNO);
-- CHECK 제약조건추가 후에 조건 반영
ALTER TABLE employees ADD CONSTRAINT chk_salary CHECK (salary > 0);
-- 컬럼 삭제
ALTER TABLE users DROP COLUMN age;
-- 컬럼 데이터 타입 변경
ALTER TABLE users MODIFY COLUMN name VARCHAR(100);
-- 컬럼 이름 변경 (MySQL 8.0 이상)
ALTER TABLE users RENAME COLUMN name TO username;
-- 테이블 이름 변경
RENAME TABLE users TO customers;
-- 인덱스 삭제
ALTER TABLE users DROP INDEX idx_name;
3. DROP
기존 데이터베이스/테이블/인덱스/뷰/프로시저/트리거 "삭제" 시 사용됨.
-- 데이터베이스 삭제
DROP DATABASE IF EXISTS mydb;
-- 테이블 삭제
DROP TABLE IF EXISTS users;
-- 인덱스 삭제
DROP INDEX IF EXISTS idx_name ON users;
-- 뷰 삭제
DROP VIEW IF EXISTS active_users;
-- 프로시저 삭제
DROP PROCEDURE IF EXISTS GetUserCount;
4. RENAME
기존 테이블명/컬럼명/인덱스명 "수정" 시 사용됨.
-- 테이블 이름 변경
RENAME TABLE old_table_name TO new_table_name;
-- 컬럼명 변경
ALTER TABLE [table_name] RENAME COLUMN [old_column_name] TO [new_column_name];
-- 인덱스명 변경
ALTER TABLE mytable RENAME INDEX old_idx TO new_idx;
5. TRUNCATE
테이블의 데이터를 모두 제거하고 껍데기만 유지하고 싶을 때 사용
DELETE보다 성능이 뛰어나며 별도의 로깅을 하지 않음
TRUNCATE TABLE mytable;
✅ MODIFY, ALTER, UPDATE 차이점 및 활용 방법
MODIFY | 기존 컬럼의 데이터 타입, 속성 변경 | 컬럼 | ALTER TABLE employees MODIFY salary DECIMAL(10,2) NOT NULL; | - 컬럼의 데이터 타입 변경 가능 - ALTER TABLE의 일부 기능 - 기존 값 유지 |
ALTER | 테이블의 구조 변경 (컬럼 추가/삭제/수정, 제약 조건 변경 등) | 테이블, 컬럼, 제약 조건 |
ALTER TABLE employees ADD COLUMN address VARCHAR(255); | - 테이블 자체를 변경하는 명령어 - 컬럼 추가/삭제/변경 - 제약 조건 변경 (INDEX, FOREIGN KEY 등) |
UPDATE | 테이블의 데이터 변경 | 행(레코드) | UPDATE employees SET salary = 6000 WHERE id = 1; | - 데이터 값 수정에 사용 - 트랜잭션(COMMIT, ROLLBACK) 가능 - WHERE 절을 사용하여 특정 데이터만 변경 가능 |