MySQL
기본 정보
- 이름: MySQL
- 분류: 관계형 데이터베이스 관리 시스템(RDBMS)
- 개발사: Oracle Corporation
- 최초 공개: 1995년
- 라이선스: GPL(Community Edition), 상용(Enterprise Edition)
- 주요 용도: 웹 서비스, ERP, 쇼핑몰, 게시판, API 서버
- 관련 주제: #MySQL #DBMS #SQL #데이터베이스 #백엔드
개요
MySQL은 세계에서 가장 널리 사용되는 오픈소스 관계형 데이터베이스 관리 시스템(RDBMS) 중 하나이다.
데이터를 테이블 형태로 저장하며, SQL(Structured Query Language)을 이용해 데이터를 조회·추가·수정·삭제할 수 있다.
PHP, Java, Node.js, Python 등 대부분의 프로그래밍 언어와 연동 가능하며, WordPress, 그누보드 등 다양한 웹 서비스에서 사용된다.
주요 특징
- 관계형 데이터베이스(RDBMS)
- SQL 표준 지원
- 높은 성능
- 트랜잭션 지원(InnoDB)
- 복제(Replication) 지원
- 다양한 운영체제 지원
- 오픈소스 기반
데이터베이스 구조
Server
└── Database
└── Table
├── Row (레코드)
└── Column (필드)
데이터베이스 생성
CREATE DATABASE mydb;
데이터베이스 선택
USE mydb;
테이블 생성
CREATE TABLE member (
mb_id INT AUTO_INCREMENT PRIMARY KEY,
mb_name VARCHAR(100),
mb_email VARCHAR(255),
created_at DATETIME
);
데이터 조회
SELECT *
FROM member;
특정 컬럼 조회
SELECT mb_name, mb_email
FROM member;
조건 조회
SELECT *
FROM member
WHERE mb_id = 1;
데이터 추가
INSERT INTO member (
mb_name,
mb_email
)
VALUES (
'구름',
'cloud@test.com'
);
데이터 수정
UPDATE member
SET
mb_name='홍길동'
WHERE mb_id=1;
데이터 삭제
DELETE
FROM member
WHERE mb_id=1;
정렬
SELECT *
FROM member
ORDER BY mb_id DESC;
개수 조회
SELECT COUNT(*)
FROM member;
LIKE 검색
SELECT *
FROM member
WHERE mb_name LIKE '%홍%';
LIMIT
SELECT *
FROM member
LIMIT 10;
페이징
LIMIT 0,10;
JOIN
SELECT *
FROM member m
JOIN point p
ON m.mb_id=p.mb_id;
여러 테이블을 연결하여 조회할 수 있다.
GROUP BY
SELECT
mb_level,
COUNT(*)
FROM member
GROUP BY mb_level;
INDEX
CREATE INDEX idx_name
ON member(mb_name);
검색 성능 향상을 위해 사용된다.
PRIMARY KEY
PRIMARY KEY (mb_id)
테이블의 고유 식별자이다.
FOREIGN KEY
FOREIGN KEY (user_id)
REFERENCES member(mb_id)
테이블 간 관계를 정의한다.
트랜잭션
START TRANSACTION;
UPDATE member
SET point=point-100
WHERE mb_id=1;
COMMIT;
오류 발생 시
ROLLBACK;
으로 이전 상태로 복구할 수 있다.
대표 자료형
| 자료형 | 설명 |
|---|---|
| INT | 정수 |
| BIGINT | 큰 정수 |
| VARCHAR | 문자열 |
| CHAR | 고정 문자열 |
| TEXT | 긴 문자열 |
| DATE | 날짜 |
| DATETIME | 날짜+시간 |
| TIMESTAMP | 타임스탬프 |
| DECIMAL | 정확한 소수 |
| FLOAT | 실수 |
| BOOLEAN | 논리값 |
Storage Engine
InnoDB
- 트랜잭션 지원
- Foreign Key 지원
- Row Lock 지원
현재 기본 엔진이다.
MyISAM
- 읽기 성능 우수
- 트랜잭션 미지원
- 테이블 Lock 방식
레거시 프로젝트에서 주로 볼 수 있다.
주요 활용 분야
- 게시판
- 쇼핑몰
- ERP
- 회원관리
- API 서버
- CMS
- 블로그
- 게임 서버
장점
- 무료 사용 가능
- 높은 성능
- 다양한 언어 지원
- 대규모 커뮤니티
- 쉬운 설치
- 안정적인 운영
단점
- 복잡한 분석 쿼리는 전문 분석 DB보다 제한적일 수 있음
- 대규모 분산 환경에서는 추가 설계 필요
- 잘못된 인덱스 설계 시 성능 저하 가능
실무 메모
실무에서는 다음과 같은 방식이 권장된다.
utf8mb4문자셋 사용- InnoDB 엔진 사용
- Primary Key 지정
- 필요한 컬럼에 Index 생성
SELECT *사용 최소화- Prepared Statement 사용
- SQL Injection 방지
- 정기 백업 수행
- EXPLAIN으로 실행 계획 확인
- Slow Query 로그 활성화
MySQL과 함께 사용하는 기술
대표 관리 도구
- MySQL Workbench
- phpMyAdmin
- DBeaver
- HeidiSQL
- Navicat
관련 문서
출처
- MySQL 공식 홈페이지
- MySQL Reference Manual
- 위키백과 「MySQL」