데이터베이스의 구조를 정의하고 관리하는데 사용됩니다.
CREATE: 데이터베이스 객체를 생성합니다. (CREATE TABLE, CREATE INDEX 등)CREATE TABLE employees (
employee_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
hire_date DATE
);
ALTER: 데이터베이스 객체를 수정합니다. (ALTER TABLE 등)ALTER TABLE employees
ADD COLUMN department VARCHAR(50);
DROP: 데이터베이스 객체를 삭제합니다. (DROP TABLE 등)DROP TABLE employees;
TRUNCATE: 테이블의 모든 레코드를 삭제하지만 테이블은 유지합니다. TRUNCATE TABLE employees;
SELECT: 데이터베이스에서 정보를 검색합니다.SELECT first_name, last_name FROM employees WHERE department = 'IT';
INSERT: 새로운 데이터를 테이블에 삽입합니다.INSERT INTO employees (employee_id, first_name, last_name, hire_date, department)
VALUES (1, 'John', 'Doe', '2022-01-01', 'IT');
UPDATE: 테이블의 기존 데이터를 수정합니다.UPDATE employees SET department = 'HR' WHERE employee_id = 1;
DELETE: 테이블에서 데이터를 삭제합니다.DELETE FROM employees WHERE employee_id = 1;
GRANT: 사용자에게 특정 작업을 수행할 권한을 부여합니다.GRANT SELECT ON employees TO username;
REVOKE: 사용자로부터 특정 작업 수행 권한을 제거합니다.REVOKE SELECT ON employees FROM username;
COMMIT: 트랜잭션을 완료하고, 데이터베이스 변경사항을 영구적으로 저장ROLLBACK: 트랜잭션을 취소하고, 마지막 COMMIT 이후의 모든 변경사항을 되돌림SAVEPOINT: 트랜잭션 내 특정 지점을 마킹하여 필요시 그 지점으로 되돌릴 수 있음관리자 권한: 유저와 관련된 작업을 수행하기 위해서는 MySQL에서 관리자(보통 root) 권한이 필요
mysql -u root -p : 유저 로그인> GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost';
> FLUSH PRIVILEGES; # 변경된 권한 적용
> SHOW GRANTS FOR 'username'@'localhost'; # 부여된 권한 확인
> SHOW GRANTS; # 현재 로그인한 유저의 권한 확인
PRIMARY KEY / AUTO_INCREMENT / NOT NULL / UNIQUE / DEFAULT / CHECK
PRIMARY KEY(고유 식별자)
AUTO_INCREMENT
NOT NULL
INSERT INTO Users (username) VALUES (NULL); -- NULL은 불가
UNIQUE
DEFAULT
CHECK
age INT DEFAULT 18 CHECK (age >= 0)
# 실행
INSERT INTO Users (username, email)
VALUES ('김철수', 'kim@test.com'); -- age는 입력 안 했으므로 18로 자동
CREATE TABLE Users (
id INT PRIMARY KEY AUTO_INCREMENT, -- 고유번호, 자동 증가
username VARCHAR(50) NOT NULL UNIQUE, -- 이름은 중복 불가, NULL 불가
# VARCHAR(50) → 최대 50글자까지 저장 가능 (0~50 글자).
email VARCHAR(100) UNIQUE, -- 이메일은 중복 불가 (NULL 허용 가능)
age INT DEFAULT 18 CHECK (age >= 0), -- 기본값은 18, 음수 불가
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 입력 안 하면 현재시간 자동
);
# 사용 예시
INSERT INTO Users (username, email, age)
VALUES ('홍길동', 'hong@test.com', 25);
INSERT INTO Users (username, email)
VALUES ('김철수', 'kim@test.com'); -- age는 입력 안 했으므로 18로 자동
| 분류 | 타입 | 특징/용도 | 사용 예시 |
|---|---|---|---|
| 숫자형 | INT | 정수 (일반 범위, 약 –21억 ~ 21억) | 사용자 ID, 나이, 게시글 번호 |
| BIGINT | 매우 큰 정수 (약 –9경 ~ 9경) | 유튜브 조회수, 은행 계좌 금액 | |
| DECIMAL | 정확한 소수 (금액, 환율 계산에 적합) | 상품 가격, 환율, 급여 | |
| FLOAT | 근사 소수 (빠름, 정밀도 낮음) | 온도, GPS 좌표, 과학 계산 | |
| 문자형 | CHAR(n) | 고정 길이, 자리 부족하면 공백 채움 | 주민등록번호 뒷자리, 국가 코드(“KR”) |
| VARCHAR(n) | 가변 길이, 실제 글자 수만 저장 | 이름, 이메일, 주소 | |
| TEXT | 긴 문자열 (최대 4GB) | 게시글 본문, 댓글 내용 | |
| BLOB | 바이너리 데이터(파일 저장) | 프로필 사진, 첨부 파일 | |
| 날짜/시간 | DATE | 날짜만 저장 (YYYY-MM-DD) | 생년월일, 행사일 |
| DATETIME | 날짜+시간 (넓은 범위 기록 가능) | 주문일시, 예약 시간 | |
| TIMESTAMP | 날짜+시간 (자동 기록, 로그용) | 회원 가입 시간, 최근 수정 시간 |
CREATE TABLE Users (
id INT PRIMARY KEY AUTO_INCREMENT, -- 회원 번호 (자동 증가)
username VARCHAR(50) NOT NULL UNIQUE, -- 사용자 이름 (최대 50글자, 중복 불가)
email VARCHAR(100) NOT NULL UNIQUE, -- 이메일 (최대 100글자, 중복 불가)
age INT, -- 나이 (정수)
balance DECIMAL(10,2) DEFAULT 0.00, -- 계좌 잔액 (소수점 2자리, 금액)
profile_text TEXT, -- 자기소개 (긴 글 가능)
profile_image BLOB, -- 프로필 이미지 (바이너리 저장)
birth DATE, -- 생년월일 (날짜만)
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 가입 시간 (자동 기록)
);
INSERT INTO Users (username, email, age, balance, profile_text, birth)
VALUES
('honggildong', 'hong@test.com', 25, 15000.50, '안녕하세요, 홍길동입니다.', '2000-05-05');
INSERT INTO Users (username, email, age, balance, profile_text, birth)
VALUES
('kimcs', 'kim@test.com', 30, 0.00, '여행을 좋아합니다.', '1995-10-10');
SELECT id, username, email, age, balance, birth, created_at
FROM Users;
| id | username | age | balance | birth | created_at | |
|---|---|---|---|---|---|---|
| 1 | honggildong | hong@test.com | 25 | 15000.50 | 2000-05-05 | 2025-09-03 15:40:00 |
| 2 | kimcs | kim@test.com | 30 | 0.00 | 1995-10-10 | 2025-09-03 15:41:00 |
ALTER USER 'username'@'localhost' IDENTIFIED BY 'password';
DROP USER IF EXISTS 'username'@'localhost';
CREATE TABLE users (
user_id INT PRIMARY KEY, -- 식별자
name VARCHAR(50),
age INT,
email VARCHAR(100)
);