21.2.27

커피 내리는 그냥 사람·2021년 2월 27일
0

위코드 pre코스

목록 보기
27/28

<MySQL이란?>

  • 생활코딩 강의 + 데이터베이스 노션 자료 공부한 사항 정리

MySQL은 관계형 데이터베이스 시스템 중 하나.

1. 관계형 데이터란? : 데이터가 서로 관계가 있다는 뜻.

  • e.g 스타벅스 알러지 요소 데이터와 알러지 요소를 가진 음료 데이터

2. 어떻게 저장되어 있을까?

데이터베이스 구조

항상 헷갈리는 것 : row(행, 가로), column(열, 세로)

  • row : 실제 입력되는 값들
  • column : 테이블의 항목
  • field : 한 칸, 행&열의 교차점

그림으로 정리해보자

3. MySQL 사용하기

SQL? : Structured Query Language, 데이터베이스에서 데이터를 저장하거나 얻기 위해서 사용하는 표준화된 언어.

1. 기본 작동 명령어

  1. 생성 :
    CREATE DATABASE `데이터베이스명` CHARACTER SET utf8 COLLATE utf8_general_ci;

  2. 삭제 :
    DROP DATABASE `데이터베이스명`;

  3. 열람 :
    SHOW DATABASES;

  4. 선택 :
    USE `데이터베이스명`

2. Table 만들기

  1. 스키마? : 테이블에 적재될 데이터의 구조, 형식 정의 미리 하는 것. 설계도.

  2. 설계도 만드는 법 :

create table "table_name"(
	컬럼1 data_type,
    컬럼2 data_type,....
);

e.g 오탈자 정말 주의. / 성격에 따라 데이터 타입 잘 정해서 사용하기.

CREATE TABLE `student` (
    `id`  tinyint NOT NULL ,
    `name`  char(4) NOT NULL ,
    `sex`  enum('남자','여자') NOT NULL ,
    `address`  varchar(50) NOT NULL ,
    `birthday`  datetime NOT NULL ,
    PRIMARY KEY (`id`)
);

제대로 컬럼이 만들어졌는지 확인하는 법 :
desc table명

3. CRUD

  1. insert(C)
INSERT INTO table_name VALUES (value1, value2, value3,...)
# 한 row를 한 줄로 순서대로
혹은

INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, value2, value3,...)
한 로우에 컬럼 순으로 하나 씩 맞추기 ; 약간 키워드 인자 같은 느낌

예 : 
mysql> insert into student (`id`, `name`, `sex`, `address`, `birthday`) values ('1', '웬디', '여자', '서울시 강남구', '940221');

2.Read(R)

e.g:

  • 단순히 불러오기
mysql> select * from student;
# 다 불러오기

mysql> select * from student where id=3;
# id값이 3번인 것만 가져오기

mysql> select * from student where name="웬디" or name="슬기";
# 두 조건 중 or 인 조건에서 가져오기
반대로 and도 있음.
  • 그룹짓기(어떤 어떤 데이터들이 있는가?)
mysql> select address from student group by address;
  • 정렬하기 :
mysql> select * from student order by birthday;

반대는? : + desc

  1. Update(U)
mysql> update `student` set name='아이린' where id=3;
# update 테이블명 set 바꾸는 부분(여러 데이터도 가능하다) where ID
  1. Delete(D)
mysql> insert into `student` value(6, '최민호', '남자', '서울시 강동구', '910203');

데이터를 추가한 뒤 지워보면

mysql> delete from student where id=6;

drop table을 하면 테이블 전체가 지워진다.


4. MySQL과 join

-> 분할된 테이블 간 관계성 부여(중복 방지.)

예시 )

  • 문제점 : 서울시 강남구, 서울시 송파구, 서울시 서초구 등 중복된 데이터 발생

  • 분석 : 각 사람이 address값을 '참조' 하고 있음.
    즉 address가 1, 사람의 관한 데이터(이름, 성별, 생일) '다'인 one-to-many 관계를 가진 데이터베이스 테이블이라고 볼 수 있다.

  • 약간 노동력이 필요한 작업이었지만 다음과 같이 완성했다. 위의 데이터와 아래 데이터로 나눠서 볼 수 있는 것이다.

  • 스타벅스 사례와 비슷

여기서 메뉴 id를 참조하듯

students가 address를 참조하고 있다. 그래서 student에 address_id가 있는 것(오타는 무시..)

번외 : 다른 예시 구현해보기

먼저 MySQL을 좀 더 시각화 하는 프로그램을 설치


실행도 $ mycli -u root 
  • 해 볼 작업 : django 클래스에서 foreign key를 물려 데이터를 합해봤듯 MySQL에서도 join이라는 기능으로 구현해보기

  • 사전 작업 : 먼저 표를 두 개 만든다. 나는 레드벨벳 멤버의 프로필과 각 멤버들의 솔로곡 표를 만들었다.

  • 여기서 솔로곡의 표인 songs가 레드벨벳 멤버의 Profile이라는 데이터를 참조한다. 따라서 foriegn key의 위치는 (id가 들어가는것) songs다.

  • 표 예시
    Profile

songs

여기서 artist_id와 profile의 아이디를 맞출 것이다.

select Profile.ID, Profile.Nickname, songs.title from Profile
# 프로필의 id, 닉네임, 그리고 songs의 타이틀을 가져와서
join songs 
# 프로필과 송스를 조인하고
on Profile.id = songs.artist_id;
# 프로필 아이디와 송스의 아티스트 아이디는 같다.
  • 결과 :

  • 아주 깔끔하게 맞춰졌다. 뭐 닉네임에서 중복은 발생했지만 그래도 두 표를 조인하는데는 성공했다.
profile
커피 내리고 향 맡는거 좋아해요. 이것 저것 공부합니다.

0개의 댓글