MySQL 설치 절차
윈도우 환경 기준으로 설치 방법을 안내합니다.
1단계: MySQL 다운로드 및 압축 해제
- 공식 웹사이트에서 최신 버전 다운로드
- 원하는 디렉토리에 압축 파일 해제
2단계: 설정 파일 구성
[mysqld]
port=3306
basedir=C:\Programs\MySQL
datadir=C:\Programs\MySQL\data
max_connections=200
max_connect_errors=10
character-set-server=utf8mb4
default-storage-engine=INNODB
default_authentication_plugin=mysql_native_password
[client]
default-character-set=utf8mb4
3단계: 초기화 실행
- 관리자 권한으로 명령 프롬프트 실행
- bin 폴더 이동 후
mysqld --initialize --console입력 - 생성된 비밀번호를 반드시 기록
4단계: 서비스 등록
mysqld install MySQLService
5단계: 서비스 제어
net start MySQLService
net stop MySQLService
연결 방법
명령행 접근
mysql -uadmin -p -P3306 -hlocalhost
초기 비밀번호 변경 필수:
ALTER USER 'admin'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewPass1!';
Navicat 연동
12버전 사용 시 호스트: 127.0.0.1, 포트: 3306, 인증 방식: Native Password 설정
Node.js 연동 예시
const mysql = require('mysql');
const pool = mysql.createPool({
host: 'localhost',
user: 'admin',
password: 'NewPass1!',
database: 'school_db'
});
pool.query('SELECT 1 + 1 AS result', (err, rows) => {
console.log(rows[0].result);
});
삭제 절차
cd C:\Programs\MySQL\bin
mysqld remove
다중 인스턴스 구성
포트 개념
IP 주소로 서버 식별, 포트로 특정 애플리케이션 구분
설치 단계
- 복사 후 폴더명 변경 (ex: mysql_3307)
- my.ini 파일 생성, 포트 수정 (ex: 3307)
- 관리자 명령 프롬프트에서
mysqld --initialize --console실행 - 서비스 등록 시 인스턴스명 추가:
mysqld install MySQLInstance3307 - 서비스 시작:
net start MySQLInstance3307 - 접속 명령:
mysql -uadmin -p -P3307
서브유저 생성
CREATE USER 'analyst'@'localhost' IDENTIFIED BY 'SecurePass2!';
데이터베이스 관리
생성
CREATE DATABASE school_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
목록 확인
SHOW DATABASES;
선택
USE school_db;
테이블 설계
정규화 원칙
- 1NF: 분리 불가능한 원자값
- 2NF: 고유 키에 대한 완전 의존
- 3NF: 다른 테이블에 존재하는 필드 제외
테이블 생성
CREATE TABLE student (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL DEFAULT 'Unknown',
age INT UNSIGNED NOT NULL DEFAULT 0,
id_number VARCHAR(18) NOT NULL DEFAULT '',
PRIMARY KEY (id)
);
CRUD 작업
삽입
INSERT INTO teacher (name, age, id_number)
VALUES ('Kim', 45, '123456789012345678');
삭제
DELETE FROM teacher WHERE id = 10;
DELETE FROM teacher; -- 전체 삭제
수정
UPDATE teacher SET age = 50 WHERE id = 15;
UPDATE teacher SET age = 30, id_number = '987654321012345678' WHERE id = 15;
조회
SELECT * FROM teacher;
SELECT name, age FROM teacher WHERE age > 30;
조건 검색
| 연산자 | 설명 | 예시 |
|---|---|---|
| < | 작은 값 | WHERE age < 30 |
| > | 큰 값 | WHERE age > 50 |
| BETWEEN | 범위 내 | WHERE age BETWEEN 20 AND 40 |
| LIKE | 패턴 매칭 | WHERE name LIKE 'Lee%' |
JOIN 연산
LEFT JOIN
SELECT * FROM course LEFT JOIN teacher ON course.teacher_id = teacher.id;
INNER JOIN
SELECT c.*, t.name FROM course c INNER JOIN teacher t ON c.teacher_id = t.id;
정렬
SELECT * FROM teacher ORDER BY age DESC, id ASC;
집계 함수
SELECT AVG(age), COUNT(*) FROM teacher;
조건 함수
SELECT name, IF(age > 18, '성인', '청소년') AS status FROM student;
날짜 함수
SELECT CURDATE() AS today, NOW() AS current_time;
정규표현식
SELECT * FROM student WHERE name REGEXP '^김';