시작 전체 흐름 한눈에
XAMPP가 설치된 환경에서 CMD를 열고 MySQL CLI에 접속한 뒤, 데이터베이스를 만들고 테이블을 생성하는 순서다. 이 흐름을 한 번 익혀두면 이후 PHP에서 DB 작업할 때 구조가 보인다.
CMD 실행
→
mysql -u root -p
→
CREATE DATABASE
→
USE sampledb
→
CREATE TABLE
→
INSERT / SELECT
실제 CMD 세션 미리보기
C:\> cd xampp\mysql\bin
C:\xampp\mysql\bin> mysql -u root -p
Enter password: (엔터)
Welcome to the MariaDB monitor...
MariaDB [(none)]> CREATE DATABASE sampledb DEFAULT CHARACTER SET utf8mb4;
Query OK, 1 row affected
MariaDB [(none)]> USE sampledb;
Database changed
MariaDB [sampledb]> CREATE TABLE member (...);
Query OK, 0 rows affected
용어 핵심 용어 정리
XAMPPApache + MySQL + PHP를 한번에 설치하는 로컬 개발 환경 패키지
MySQL CLImysql 명령어로 접속하는 MySQL 텍스트 인터페이스. SQL을 직접 입력해 실행
utf8mb44바이트 UTF-8. 이모지·한중일 문자 완전 지원. MySQL의 utf8(3바이트)보다 광범위
COLLATE문자 정렬·비교 기준. utf8mb4_general_ci는 대소문자 구분 없이(ci) 정렬
AUTO_INCREMENT데이터 삽입 시 자동으로 1씩 증가하는 숫자 컬럼 속성. id에 주로 사용
PRIMARY KEY행을 유일하게 식별하는 컬럼. 중복 불가, NULL 불가. 보통 id 컬럼에 지정
MEDIUMINT중형 정수형. UNSIGNED 붙이면 0~16,777,215. 일반적인 회원 수에 충분
VARCHAR(n)최대 n글자 가변 문자열. 실제 입력 길이만큼 저장 공간 사용. 이름·이메일에 적합
DDLData Definition Language. CREATE / DROP / ALTER처럼 구조를 정의하는 SQL 분류
DMLData Manipulation Language. INSERT / SELECT / UPDATE / DELETE처럼 데이터를 다루는 SQL
1 CMD에서 MySQL 접속하기
XAMPP MySQL bin 폴더로 이동 후 접속
XAMPP의 MySQL은 C:\xampp\mysql\bin\에 있다. CMD를 열고 이 경로로 이동한 뒤 mysql -u root -p를 입력한다. XAMPP 기본 설정에서는 root 비밀번호가 없으므로 엔터를 치면 접속된다.
1
CMD 열기시작 → cmd 검색 → 명령 프롬프트 실행
2
드라이브 이동C: 엔터 (XAMPP가 C 드라이브에 있는 경우)
3
bin 폴더 이동cd xampp\mysql\bin
4
MySQL 접속mysql -u root -p → 비밀번호 없으면 엔터
5
프롬프트 확인MariaDB [(none)]> 가 나오면 접속 성공
cd xampp\mysql\bin mysql -u root -p -- 비밀번호 없이 엔터 -- MariaDB [(none)]> 프롬프트가 나타나면 접속 성공
※ XAMPP는 내부적으로 MySQL 대신 MariaDB를 사용하지만, 명령어와 SQL 문법은 동일하다. MariaDB [(none)]> 라고 떠도 정상.
2 CREATE DATABASE — 데이터베이스 생성
utf8mb4와 collation 설정이 중요한 이유
데이터베이스를 만들 때 문자셋과 정렬 기준을 함께 지정한다. utf8mb4는 이모지 포함 모든 유니코드 문자를 저장할 수 있고, utf8mb4_general_ci는 한글·영문·숫자를 대소문자 구분 없이 정렬한다. 나중에 변경하기 번거로우므로 처음부터 utf8mb4로 만드는 것이 좋다.
CREATE DATABASE sampledb DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci; -- Query OK, 1 row affected 가 나오면 성공 SHOW DATABASES; -- 현재 있는 DB 목록 전체 확인
utf8 vs utf8mb4 — 왜 mb4를 써야 하나
❌ utf8 (MySQL 전통 방식)
- 실제로는 3바이트 UTF-8만 처리
- 이모지(4바이트 문자) 저장 시 오류
- U+10000 이상 문자 지원 안 됨
- 레거시 호환 목적으로만 유지
✅ utf8mb4 (권장)
- 완전한 4바이트 UTF-8
- 이모지·한자·희귀문자 모두 저장
- 국제화 서비스에 안전
- MySQL 8.0 이후 기본값
⚠ MySQL의 utf8은 사실 3바이트 UTF-8이라 이모지를 저장하지 못한다. 반드시 utf8mb4를 사용할 것.
3 USE — 작업할 데이터베이스 선택
이후 모든 SQL이 이 DB에서 실행된다
MySQL 서버 안에 여러 데이터베이스가 있을 수 있다. USE sampledb;를 실행하면 이후 입력하는 SQL이 모두 sampledb를 대상으로 실행된다. 프롬프트가 MariaDB [sampledb]>로 바뀌면 정상이다.
USE sampledb; -- Database changed 메시지 확인 -- 프롬프트: MariaDB [sampledb]> SHOW TABLES; -- 현재 DB에 있는 테이블 목록 확인 (빈 DB면 Empty set)
USE 실행 후 SHOW TABLES; 를 쳐보면 현재 DB 안에 어떤 테이블이 있는지 확인할 수 있다. 처음에는 Empty set 이 정상.
4 CREATE TABLE — 테이블과 컬럼 생성
각 컬럼 타입과 속성의 의미
테이블은 Excel의 시트와 같다. 컬럼(열)을 미리 정의하고, 이후 데이터(행)를 INSERT로 추가한다. 각 컬럼의 타입과 속성이 저장할 수 있는 데이터의 종류와 범위를 결정한다.
DROP TABLE IF EXISTS member; -- 이미 있으면 삭제 후 재생성 (IF EXISTS로 오류 방지) CREATE TABLE member ( id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, last_name VARCHAR(50), first_name VARCHAR(50), PRIMARY KEY (id) );
| 컬럼 |
타입·속성 |
의미 |
id |
MEDIUMINT UNSIGNED |
중형 정수, 음수 없음 → 0~16,777,215까지 저장 가능 |
id |
NOT NULL |
NULL 값(빈값) 허용 안 함 — id는 반드시 있어야 함 |
id |
AUTO_INCREMENT |
데이터 추가 시 자동으로 1 증가. INSERT 시 id 생략 가능 |
last_name |
VARCHAR(50) |
최대 50글자 가변 문자열. 실제 길이만큼만 저장 공간 사용 |
first_name |
VARCHAR(50) |
동일. 입력 없으면 NULL로 저장 |
| PRIMARY KEY(id) |
기본키 |
id 컬럼을 행의 고유 식별자로 지정. 중복·NULL 불가 |
5 DESC — 테이블 구조 확인
만든 테이블이 의도대로 생성됐는지 검증
DESC 테이블명;은 테이블의 컬럼 구조를 출력한다. Field·Type·Null·Key·Default·Extra 6개 컬럼으로 테이블 스키마를 한눈에 볼 수 있다. CREATE TABLE 직후 반드시 실행해서 구조가 올바른지 확인하는 습관을 들이자.
DESC member; -- member 테이블 구조 확인 -- Field / Type / Null / Key / Default / Extra 컬럼으로 출력
+------------+------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------------+------+-----+---------+----------------+
| id | mediumint(8) unsigned | NO | PRI | NULL | auto_increment |
| last_name | varchar(50) | YES | | NULL | |
| first_name | varchar(50) | YES | | NULL | |
+------------+------------------------+------+-----+---------+----------------+
Key 컬럼에 PRI가 보이면 PRIMARY KEY가 정상 설정된 것. Extra에 auto_increment가 있으면 AUTO_INCREMENT 정상.
6 INSERT와 SELECT — 데이터 넣고 확인하기
테이블이 잘 동작하는지 실제 데이터로 검증
테이블 구조를 만든 직후 데이터를 몇 개 넣어 보고 SELECT로 꺼내 확인하면 스키마가 의도대로 동작하는지 바로 알 수 있다. id는 AUTO_INCREMENT이므로 INSERT 시 생략한다.
-- 데이터 삽입 (id는 AUTO_INCREMENT이므로 생략) INSERT INTO member (last_name, first_name) VALUES ('Kim', 'Minjun'); INSERT INTO member (last_name, first_name) VALUES ('Lee', 'Soyeon'); -- 모든 데이터 조회 SELECT * FROM member;
+----+-----------+------------+
| id | last_name | first_name |
+----+-----------+------------+
| 1 | Kim | Minjun |
| 2 | Lee | Soyeon |
+----+-----------+------------+
2 rows in set (0.00 sec)
id가 1, 2로 자동 증가된 것이 보인다. 이후 데이터를 더 추가하면 3, 4... 순서로 이어진다.
7 ALTER TABLE — 컬럼 추가·수정
테이블 구조를 나중에 바꿔야 할 때
처음 설계한 대로만 쓸 수 없는 경우가 많다. 이메일 컬럼을 빠뜨렸거나, 컬럼 타입을 바꿔야 할 때 ALTER TABLE을 사용한다. 데이터를 지우지 않고 구조만 변경한다.
-- 컬럼 추가 ALTER TABLE member ADD COLUMN email VARCHAR(100); -- 컬럼 타입 변경 (기존 데이터 보존) ALTER TABLE member MODIFY COLUMN last_name VARCHAR(100); -- 컬럼 삭제 ALTER TABLE member DROP COLUMN email; -- 변경 결과 확인 DESC member;
⚠ ALTER TABLE은 대용량 테이블에서 시간이 오래 걸릴 수 있다. 학습 환경에서는 빠르지만 실제 운영 DB에는 신중하게 적용할 것.
8 DROP TABLE과 정리 명령
실습 중 자주 쓰는 유틸리티 명령어
학습 중에는 테이블 구조를 바꾸고 싶을 때 기존 테이블을 삭제하고 다시 만드는 것이 빠르다. DROP TABLE은 테이블 전체와 데이터를 삭제한다. IF EXISTS를 붙이면 테이블이 없어도 오류가 나지 않아 실습 스크립트에 유용하다.
DROP TABLE member; -- 테이블 삭제 (데이터 포함, 없으면 오류) DROP TABLE IF EXISTS member; -- 없어도 오류 없음 (실습 스크립트에 권장) SHOW TABLES; -- 남은 테이블 목록 확인 SHOW DATABASES; -- 전체 DB 목록 확인
⚠ DROP TABLE은 복구 불가능하다. 학습 환경에서만 사용하고, 운영 환경에서는 반드시 백업 후 실행.
9 자주 하는 실수
| 실수 |
증상 |
해결 |
| USE 없이 CREATE TABLE 실행 |
ERROR 1046: No database selected |
USE sampledb; 로 먼저 DB 선택 후 실행 |
| utf8 사용 (utf8mb4 아님) |
이모지 삽입 시 Incorrect string value 오류 |
utf8mb4로 DB 재생성 또는 ALTER DATABASE로 변경 |
| DROP TABLE 후 DESC 실행 |
ERROR 1146: Table doesn't exist |
DROP 후에는 CREATE TABLE을 다시 실행해야 함 |
| 세미콜론(;) 누락 |
프롬프트가 -> 로 바뀌며 다음 줄 대기 |
; 를 입력하고 엔터 치면 정상 실행됨 |
| XAMPP MySQL 서비스가 꺼져 있음 |
mysql -u root -p 연결 실패 오류 |
XAMPP Control Panel에서 MySQL Start 버튼 클릭 |
| INSERT 시 컬럼명 순서 불일치 |
Data truncated 또는 잘못된 데이터 저장 |
INSERT INTO member (컬럼명) VALUES (값) 순서 맞추기 |
핵심 한 줄 요약
mysql -u root -pXAMPP bin 폴더에서 MySQL CLI 접속 — 비밀번호 없으면 엔터
CREATE DATABASE utf8mb4이모지·한글 완전 지원 문자셋으로 DB 생성 — utf8(3바이트) 아님
USE sampledb이후 모든 SQL이 실행될 DB 선택 — 프롬프트가 [sampledb]로 바뀜
MEDIUMINT UNSIGNED AUTO_INCREMENTid 컬럼 표준 패턴 — 자동증가 양수 정수, NOT NULL, PRIMARY KEY
DESC member테이블 컬럼 구조 확인 — Key=PRI, Extra=auto_increment 눈으로 검증
ALTER TABLE ADD COLUMN데이터 보존하면서 컬럼 추가 — DROP+CREATE보다 안전
Tags
#MySQL 초기설정 #XAMPP MySQL 접속 #CREATE DATABASE #CREATE TABLE #utf8mb4 #VARCHAR #AUTO_INCREMENT #PRIMARY KEY #ALTER TABLE #INSERT INTO #MySQL CMD #MEDIUMINT #웹개발 #티스토리
▼ 티스토리 태그 입력란 복사용
MySQL 초기설정, XAMPP MySQL 접속, CREATE DATABASE, CREATE TABLE, utf8mb4, AUTO_INCREMENT, PRIMARY KEY, ALTER TABLE, INSERT INTO, 웹개발
댓글