학습일지

[스나이퍼팩토리] 한컴AI아카데미(26.05.06)

cd-record 2026. 5. 7. 17:46
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 접속

  1. Mysql 설치한 폴더 내의 bin폴더 복사
  2. 시스템 속성 - 환경변수 - 시스템변수(Path) 편집 - 새로만들기- 복사한 경로 - 확인
  3. cmd 창 열어서 mysql -u root -p 명령어 입력 후 비밀번호 입력 후 들어가기

(안되면 인터넷에서 찾아보세요!!)

 

2. SQLyog

MySQL용 GUI 도구로, MySQL 서버에 연결해 데이터베이스를 시각적으로 관리하고 쿼리를 작성·실행하는 프로그램

setup.exe
14.40MB

 

 

 

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

  1. FROM: 데이터를 가져올 테이블 확인
  2. WHERE: 조건에 맞지 않는 데이터 먼저 제거
  3. GROUP BY: 남은 데이터를 그룹으로 묶음
  4. HAVING: 그룹 결과 중 조건에 맞는 것만 남김
  5. SELECT: 보여줄 컬럼 선택 (별칭 탄생)
  6. ORDER BY: 결과 정렬 (SELECT 별칭 사용 가능)
  7. LIMIT: 최종 결과에서 일부만 추출

003.sql
0.00MB
004.sql
0.01MB
005.sql
0.00MB

 

 

 

 

느낀점

 

SQLite에 이어서 MySQL도 접하게 되었다. 일반적인 MySQL은 명령프롬프트창에서 실행해야해서 모든 실행을 쿼리를 통해해야하지만 SQLyog라는 프로그램을 통해서 하니까 보기도 이해하기도 편했던 것같다. SQLite에서 배운 명령어들과 거의 비슷하지만 몇 가지 다른 부분과 MySQL만의 특징 같은 것들이 있어 좀 헷갈리는 면도 있는 것 같다. 

 

 

 

 

 

 

——————————————————————————

본 후기는 [한글과컴퓨터x한국생산성본부x스나이퍼팩토리] 한컴 AI 아카데미 (B-log) 리뷰로 작성 되었습니다.