데이터를 안전하고 편하고 빠르게 보관
데이터 베이스는 거대하고 복잡한 데이터를 다루기 위해
👀 본질
💡데이터 베이스는 파일과 달리 프로그래밍 언어로
데이터를 추가, 수정, 삭제하고 읽을 수 있다 = 🎉 자동화 가능 🎉
✏️ 데이터 베이스 랭킹 확인
2023 기준 관계형 DB가 압도적
https://db-engines.com/en/ranking
Oracle: 대기업 등에서 사용, 고비용
MySQL: 오픈소스, 관계형DB + 개인, 소기업, 데이터의 신뢰성 중요도가 낮은 경우
MongoDB: 관계형X
관계형 데이터베이스: 데이터를 표 형태로 정리
WEB + MySQL -> 폭발적 성장
DB는 컴퓨터 언어로 제어가 가능!! -> 대화하듯 하기에 자유롭고 다양한 활용
🌱 표(table) > 그룹화 > 데이터베이스(database)
🌱 스키마: 서로 연관된 표들을 서로 그룹화 할 때 사용하는 일종의 폴더 > 데이터베이스 서버에 저장
cd /usr/local/mysql/bin
bin ./mysql -u root -p
🌱 -u: root라는 사용자로 접속
🌱 -p: mysql이 비밀번호를 물어보도록
🌱 DB 생성: mysql> CREATE DATABASE 스키마이름;
🌱 DB생성 확인: mysql> SHOW DATABASES;
->
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| opentutorials |
| performance_schema |
| sys |
+--------------------+
🌱 DB 사용 선언: USE opentutorials;
-> Database changed
📍SQL = Structured Query Language
📍Table
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 | |
+-------------+--------------+------+-----+---------+----------------+
https://www.mysqltutorial.org/mysql-cheat-sheet.aspx
🌱 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;
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; -> 역정렬
👉 Oracle is에만 ...이 없다 수정해보자
UPDATE topic SET description='Oracle is...', title='Oracle' WHERE id=2;
💡WHERE로 어떤 데이터를 수정할지 지정해주지 않으면 전부 바뀌는 참사가...
👉 id가 1인 데이터를 삭제해보자
DELETE FROM topic WHERE id=1;
💡WHERE로 어떤 데이터를 수정할지 지정해주지 않으면 전부 삭제되는는 대대대참사가...
중복되는 데이터를 가진 하나의 표를 분산 저장하지만 하나의 표로 보도록
👉 분할 저장, 합쳐서 보기
🌱 테이블 이름 수정
RENAME TABLES topic TO topic_backup;
🌱 기초 데이터 입력
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을 통해 모든 테이블 사이 관계를 만들 수 있다 -> 원하는 테이블 생성
하나를 바꾸면 공통되는 특징을 가진 모든 테이블의 데이터를 수정할 수 있다
database server
database client <--> database server
client(MySQL)가 명령어를 통해 database server를 제어, 제공
MySQL 클라이언트: GUI방식로!