MySQL 환경 설정
1. MySQL 다운로드
https://dev.mysql.com/downloads/installer/
MySQL :: Download MySQL Installer
MySQL Installer 8.0.46 Note: MySQL 8.0 is the final series with MySQL Installer. As of MySQL 8.1, use a MySQL product's MSI or Zip archive for installation. MySQL Server 8.1 and higher also bundle MySQL Configurator, a tool that helps configure MySQL Serve
dev.mysql.com
* MySQL 설치 후 cmd 창에서 mySQL 접속
- Mysql 설치한 폴더 내의 bin폴더 복사
- 시스템 속성 - 환경변수 - 시스템변수(Path) 편집 - 새로만들기- 복사한 경로 - 확인
- cmd 창 열어서 mysql -u root -p 명령어 입력 후 비밀번호 입력 후 들어가기
(안되면 인터넷에서 찾아보세요!!)
2. SQLyog
MySQL용 GUI 도구로, MySQL 서버에 연결해 데이터베이스를 시각적으로 관리하고 쿼리를 작성·실행하는 프로그램
3. 기본 MySQL 명령어
# DCL (Data Control Language) 명령어는 데이터베이스의 보안과 권한 관리를 담당하는 SQL 명령어입니다. DCL 명령어를 사용하여 사용자 계정을 생성하고, 권한을 부여하거나 제거할 수 있습니다.
-- MySQL 접속
-- mysql -u [사용자 이름] -p
-- Enter password: [비밀번호 입력]
-- 데이터베이스 목록 확인
SHOW DATABASES;
-- 데이터베이스 생성
CREATE DATABASE my_database;
-- 데이터베이스 사용
USE my_database;
-- 테이블 목록 확인
SHOW TABLES;
-- 사용자 생성(구암호방식)
CREATE USER 'my_user'@'localhost' IDENTIFIED BY WITH mysql_native_password BY 'my_password';
--- 사용자 변경(구암호방식)
ALTER USER 'my_user'@'localhost' IDENTIFIED BY WITH mysql_native_password BY 'new_password';
-- 사용자 권한 부여
GRANT ALL PRIVILEGES ON my_database.* TO 'my_user'@'localhost';
-- 사용자 권한 부여(특정 권한)
GRANT SELECT, INSERT, UPDATE, DELETE ON my_database.* TO 'my_user'@'localhost';
-- 사용자 권한 부여 (다른 사용자에게 권한부여 권한 줌 - 주로 관리자에게)
GRANT ALL PRIVILEGES ON my_database.* TO 'my_user'@'localhost' WITH GRANT OPTION;
--- 사용자 권한 확인
SHOW GRANTS FOR 'my_user'@'localhost';
-- 권한 적용
FLUSH PRIVILEGES;
-- 사용자 삭제
DROP USER 'my_user'@'localhost';
-- 호스트 변경
RENAME USER 'my_user'@'localhost';= TO 'my_user'@'%';
-- 사용자 권한 제거
REVOKE ALL PRIVILEGES ON my_database.* FROM 'my_user'@'localhost';
4. SQLyog에서 데이터베이스 기본 설정

| 설정 항목 | 선택지 | 이유 |
| Character Set | utf8mb4 | 이모지와 모든 유니코드 문자를 저장하기 위해 |
| Collation | utf8mb4_general_ci | 일반적인 환경에서 빠른 검색과 정렬 성능을 위해 |
MySQL
1. 동일 테이블 UPDATE 제약 해결 (Self-Reference)
MySQL은 UPDATE나 DELETE 시, WHERE 절의 서브쿼리에서 수정 중인 테이블을 직접 참조하는 것을 금지합니다. 이를 해결하려면 가상 테이블(Temporary Table)을 하나 더 만들어 감싸야 합니다.
/* ❌ 오류 발생: 'mytable'을 직접 참조할 수 없음 */
UPDATE mytable SET age = (SELECT AVG(age) FROM mytable);
/* ✅ 해결: 중간에 별칭(temp)을 가진 서브쿼리를 넣어 "별도의 결과 집합"으로 인식하게 만듦 */
UPDATE mytable
SET age = (SELECT avg_age FROM (SELECT ROUND(AVG(age)) AS avg_age FROM mytable) AS temp);
2. 와일드카드와 논리 연산자 (LIKE, IN, IS NULL)
문자열 패턴 매칭과 다중 조건 비교 시 사용합니다.
- LIKE: %는 '모든 문자', _는 '한 글자'를 의미합니다.
- IN: 여러 값 중 하나라도 일치하면 참입니다. OR 조건을 여러 번 쓰는 것보다 훨씬 깔끔합니다.
-- '김'으로 시작하고 3글자인 유저 중, 부서가 '디자인'이나 '경영'인 사람
SELECT * FROM score
WHERE name LIKE '김__'
AND dept IN ('디자인학과', '경영학과');
3. 조건부 로직 (IF, CASE WHEN)
쿼리 결과물에 프로그래밍적인 조건문을 입힐 때 사용합니다.
- IF(조건, 참일때, 거짓일때): 간단한 이진 조건에 유리합니다.
- CASE WHEN: 여러 단계의 복잡한 조건(학점 계산 등)에 유리합니다.
SELECT name,
IF(f_score >= 20, 'Pass', 'Fail') AS result, -- 간단한 통과 여부
CASE
WHEN p_score >= 20 THEN '출석우수'
WHEN p_score >= 15 THEN '출석보통'
ELSE '출석미달'
END AS attendance_grade -- 단계별 등급
FROM score;
4. 집계 함수와 필터링 (GROUP BY, HAVING)
데이터를 특정 그룹으로 묶고, 그 그룹 결과에 대해 조건을 걸 때 사용합니다. WHERE는 개별 행을 거르고, HAVING은 그룹화된 결과를 거릅니다.
SELECT dept, AVG(m_score) AS mid_avg
FROM score
WHERE m_score > 10 -- [1단계] 중간고사 10점 미만인 사람들은 집계에서 아예 뺌
GROUP BY dept -- [2단계] 학과별로 묶음
HAVING mid_avg >= 20; -- [3단계] 묶고 보니 학과 평균이 20점 이상인 학과만 출력
5. 정렬과 개수 제한 (ORDER BY FIELD, LIMIT)
기본적인 오름차순/내림차순 외에 사용자 정의 순서로 정렬하거나 출력 양을 조절합니다.
- FIELD(컬럼, '값1', '값2'...): 지정한 순서대로 정렬 우선순위를 부여합니다.
- LIMIT offset, count: 게시판 페이징 처리에 필수입니다.
-- 학점을 A->B->C 순서로 정렬하고, 상위 3명만 보기
SELECT name, grade
FROM score
ORDER BY FIELD(grade, 'A', 'B', 'C', 'D', 'F'), name ASC # ASC: 오름차순, DESC: 내림차순
LIMIT 0, 3; -- 0번째(처음)부터 3개만 출력
6. 중복 제거
SELECT 바로 뒤에 붙여서 "조회된 결과 집합에서 완전히 똑같은 행은 하나만 남겨라"라고 명령하는 것입니다.
- 특징: 특정 컬럼 하나만 지정할 수도 있고, 여러 컬럼을 지정할 수도 있습니다. 여러 컬럼을 쓰면 그 값들의 조합이 중복되는 경우를 제거합니다.
-- 1. 학과 종류만 보고 싶을 때 (중복 학과 제거)
SELECT DISTINCT dept FROM score;
-- 2. '학과'와 '이름'의 조합이 중복되는 경우 제거
-- (예: 경영학과 김준우가 2명이면 하나만 표시)
SELECT DISTINCT dept, name FROM score;
7. 실행 순서
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT
- FROM: 데이터를 가져올 테이블 확인
- WHERE: 조건에 맞지 않는 데이터 먼저 제거
- GROUP BY: 남은 데이터를 그룹으로 묶음
- HAVING: 그룹 결과 중 조건에 맞는 것만 남김
- SELECT: 보여줄 컬럼 선택 (별칭 탄생)
- ORDER BY: 결과 정렬 (SELECT 별칭 사용 가능)
- LIMIT: 최종 결과에서 일부만 추출
느낀점
SQLite에 이어서 MySQL도 접하게 되었다. 일반적인 MySQL은 명령프롬프트창에서 실행해야해서 모든 실행을 쿼리를 통해해야하지만 SQLyog라는 프로그램을 통해서 하니까 보기도 이해하기도 편했던 것같다. SQLite에서 배운 명령어들과 거의 비슷하지만 몇 가지 다른 부분과 MySQL만의 특징 같은 것들이 있어 좀 헷갈리는 면도 있는 것 같다.
——————————————————————————
본 후기는 [한글과컴퓨터x한국생산성본부x스나이퍼팩토리] 한컴 AI 아카데미 (B-log) 리뷰로 작성 되었습니다.
'학습일지' 카테고리의 다른 글
| [스나이퍼팩토리] 한컴AI아카데미(26.05.08) (0) | 2026.05.08 |
|---|---|
| [스나이퍼팩토리] 한컴AI아카데미(26.05.07) (1) | 2026.05.07 |
| [스나이퍼팩토리] 한컴AI아카데미(26.05.04) (0) | 2026.05.04 |
| [스나이퍼팩토리] 한컴AI아카데미(영단어장 리뷰) (0) | 2026.04.30 |
| [스나이퍼팩토리] 한컴AI아카데미(26.04.29) (0) | 2026.04.29 |