본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
php

MySQL 초기설정 완전 정리 — XAMPP에서 데이터베이스와 테이블 만드는 전체 흐름

by 왕진 2026. 7. 13.
반응형

 

 

Web Development · MySQL / Database

MySQL 초기설정 완전 정리

XAMPP 환경에서 CMD로 MySQL에 접속하고, 데이터베이스·테이블을 만들고, 데이터를 넣고 확인하는 전체 흐름
시작 전체 흐름 한눈에

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, 웹개발
반응형

댓글