MySQL은 관계형 데이터베이스 시스템 중 하나.
그림으로 정리해보자
SQL? : Structured Query Language, 데이터베이스에서 데이터를 저장하거나 얻기 위해서 사용하는 표준화된 언어.
생성 :
CREATE DATABASE `데이터베이스명` CHARACTER SET utf8 COLLATE utf8_general_ci;
삭제 :
DROP DATABASE `데이터베이스명`;
열람 :
SHOW DATABASES;
선택 :
USE `데이터베이스명`
스키마? : 테이블에 적재될 데이터의 구조, 형식 정의 미리 하는 것. 설계도.
설계도 만드는 법 :
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명
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
mysql> update `student` set name='아이린' where id=3;
# update 테이블명 set 바꾸는 부분(여러 데이터도 가능하다) where ID
mysql> insert into `student` value(6, '최민호', '남자', '서울시 강동구', '910203');
데이터를 추가한 뒤 지워보면
mysql> delete from student where id=6;
drop table을 하면 테이블 전체가 지워진다.
-> 분할된 테이블 간 관계성 부여(중복 방지.)
예시 )
문제점 : 서울시 강남구, 서울시 송파구, 서울시 서초구 등 중복된 데이터 발생
분석 : 각 사람이 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;
# 프로필 아이디와 송스의 아티스트 아이디는 같다.