DATABASE

yeco_ob·2023년 3월 28일
0

Back-End

목록 보기
1/1

1️⃣ 데이터베이스 소개 및 본질

데이터를 안전하고 편하고 빠르게 보관
데이터 베이스는 거대하고 복잡한 데이터를 다루기 위해

👀 본질

  • 데이터 베이스를 어떻게 입력하고 출력할 것인가
  • 입력은 데이터의 생성, 수정, 삭제
    -> CRUD

💡데이터 베이스는 파일과 달리 프로그래밍 언어로
데이터를 추가, 수정, 삭제하고 읽을 수 있다 = 🎉 자동화 가능 🎉

✏️ 데이터 베이스 랭킹 확인
2023 기준 관계형 DB가 압도적
https://db-engines.com/en/ranking

Oracle: 대기업 등에서 사용, 고비용
MySQL: 오픈소스, 관계형DB + 개인, 소기업, 데이터의 신뢰성 중요도가 낮은 경우
MongoDB: 관계형X

2️⃣ MySQL 서론

데이터베이스의 목적

관계형 데이터베이스: 데이터를 표 형태로 정리
WEB + MySQL -> 폭발적 성장

✏️ 스프레드시트 VS 데이터베이스

DB는 컴퓨터 언어로 제어가 가능!! -> 대화하듯 하기에 자유롭고 다양한 활용

MySQL의 구조

🌱 표(table) > 그룹화 > 데이터베이스(database)
🌱 스키마: 서로 연관된 표들을 서로 그룹화 할 때 사용하는 일종의 폴더 > 데이터베이스 서버에 저장

MySQL 서버 접속

cd /usr/local/mysql/bin

bin ./mysql -u root -p

🌱 -u: root라는 사용자로 접속
🌱 -p: mysql이 비밀번호를 물어보도록

MySQL 스키마의 사용

🌱 DB 생성: mysql> CREATE DATABASE 스키마이름;

🌱 DB생성 확인: mysql> SHOW DATABASES;
->
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| opentutorials |
| performance_schema |
| sys |
+--------------------+

🌱 DB 사용 선언: USE opentutorials;
-> Database changed

MySQL과 테이블 구조

📍SQL = Structured Query Language

  • 정규화, 요청, 공통에 약속에 따른 언어

📍Table

  • table, 표
  • column, 열 -> 데이터의 타입
  • row, record, 행 -> 데이터 자체

3️⃣ MySQL 테이블의 생성

🌱 mysql 문법에 따라 표 생성

mysql> CREATE TABLE topic( 👉 topic이라는 표에 저장
id INT(11) NOT NULL AUTO_INCREMENT, 👉 column이름, int형(숫자를 몇자리까지 노출시킬 것인지), 값이 없는 걸 허용X, id값이 자동으로 +1
title VARCHAR(100) NOT NULL, 👉 column이름, VARCHAR=char형(100), 값이 없는 걸 허용X
description TEXT NULL,
created DATETIME NOT NULL,
author VARCHAR(15) NULL,
profile VARCHAR(200) NULL,
PRIMARY KEY(id)); 👉 성능, 중복 방지(식별자로 메인 KEY라는 뜻)

-> Query OK, 0 rows affected, 1 warning (0.02 sec)이 뜨면 성공!!

🌱 생성 확인

mysql> SHOW TABLES;
->
+-------------------------+
| Tables_in_opentutorials |
+-------------------------+
| topic |
+-------------------------+

mysql> DESC topic;
->
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| title | varchar(100) | NO | | NULL | |
| description | text | YES | | NULL | |
| created | datetime | NO | | NULL | |
| author | varchar(15) | YES | | NULL | |
| profile | varchar(200) | YES | | NULL | |
+-------------+--------------+------+-----+---------+----------------+

🌱 CHEAT SHEET

https://www.mysqltutorial.org/mysql-cheat-sheet.aspx

4️⃣ MySQL CRUD

INSERT

🌱 Create: data를 추가

mysql> INSERT INTO topic (title,description,created,author,profile) VALUES('MySQL','MySQL is...',NOW(),'egoing','developer');

-> Query OK, 1 row affected (0.01 sec) = 1개의 row가 영향을 받았다

🌱 Lead: 추가 data 확인

mysql> SELECT *FROM topic;

SELECT

https://www.w3schools.com/mysql/mysql_select.asp

🌱 테이블 모든 data 출력
SELECT *FROM topic;

🌱 특정 column만 출력
SELECT id,title,created,author FROM topic;

🌱 조건 설정
SELECT id,title,created,author FROM topic WHERE author='egoing'; -> 특정 데이터

SELECT id,title,created,author FROM topic WHERE author='egoing' ORDER BY id DESC; -> 역정렬

UPDATA

👉 Oracle is에만 ...이 없다 수정해보자

UPDATE topic SET description='Oracle is...', title='Oracle' WHERE id=2;

💡WHERE로 어떤 데이터를 수정할지 지정해주지 않으면 전부 바뀌는 참사가...

DELETE

👉 id가 1인 데이터를 삭제해보자
DELETE FROM topic WHERE id=1;

💡WHERE로 어떤 데이터를 수정할지 지정해주지 않으면 전부 삭제되는는 대대대참사가...

✏️ 관계형 데이터베이스의 필요성

중복되는 데이터를 가진 하나의 표를 분산 저장하지만 하나의 표로 보도록
👉 분할 저장, 합쳐서 보기

✏️ 테이블 분리하기

🌱 테이블 이름 수정
RENAME TABLES topic TO topic_backup;

🌱 기초 데이터 입력

✏️ JOIN_관계형 데이터 베이스

JOIN 👉 분리된 각각의 독립적인 테이블을 읽을 때 마치 하나의 테이블로 저장된 것처럼 보이도록 해준다

✔️ topic-author_id와 author-id를 연관짓고 싶다
✔️ topic테이블을 모두 출력하는데 author_id와 같은 값을 가진 author의 행을 가져와 topic 테이블에 넣어(합성해줘)

SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.id;
->

✔️ id 명칭 수정

🌟 JOIN을 통해 모든 테이블 사이 관계를 만들 수 있다 -> 원하는 테이블 생성
하나를 바꾸면 공통되는 특징을 가진 모든 테이블의 데이터를 수정할 수 있다

✏️ MySQL 클라이언트

database server

database client <--> database server

client(MySQL)가 명령어를 통해 database server를 제어, 제공

MySQL 클라이언트: GUI방식로!

0개의 댓글