출처: 생활코딩 DB2
DATABASE2 - MySQL
file은 사용하기 쉽고 어디에나 있고 전송하기 편리 / 정보를 저장
file만으론 정보를 효과적으로 CRUD(추가,수정,삭제,읽기) 하기 어려움
DB: 누구나 쉽게 데이터를 정리 정돈할 수 있는 전문적인 SW
관계형 데이터베이스: 데이터를 표의 형태로 정리정돈 가능, 정렬 검색 빠르고 편리, 안전
MySQL: 관계형 데이터베이스의 주요한 기능을 대부분 가지는 데이터베이스 시스템
무료이며 오픈소스 -> 웹과함께 폭발적인 동반 성장
MySQL의 구조
표(데이터) -> 스키마(DB) -> DB 서버
스키마: 표들을(연관된 데이터들) 그룹핑할 때 사용하는 일종의 폴더
서버: 많은 스키마들을 저장
MySQL 스키마의 사용
Bitnami WAMP Stack 설치
cmd
C:\Bitnami\wampstack-7.3.18-0\mysql\bin
mysql 서버 접속
./mysql -uroot -p
생성
CREATE DATABASE [NAME]; ->사용 드뭄
삭제
DROP DATABASE [NAME]; ->사용 드뭄
확인
SHOW DATABASES; (복수 주의)
사용
USE [NAME]; ->선언 이후 내리는 명령은 [NAME] DB에 있는 표를 대상으로 실행
SQL과 테이블 구조
Structured 구조화(표 형식 정리정돈)
Query 질의(DB에게 요청)
Language 공통의 약속(SQL)
SQL은 관계형DB라는 카테고리에 속하는 제품들이 공통적으로 DB서버를 제어할때 사용하는 언어
table 수직↓ column, 열(가로) -> DATA 구조
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
ㅣ table 수평→ row, record, 행(세로) -> DATA 자체
ㅣ
ㅣ
MySQL 테이블의 생성
어떤 분야든 cheat sheet를 검색해보면 잘정리된 정보 검색 가능
데이터베이스는 컬럼↓의 데이터 타입을 강제할 수 있음
ex) ID 컬럼 : 1,2,3,4,5(숫자) / title 컬럼: MySQL,ORACLE(문자)
MySQL datatype number 확인
CREATE TABLE topic(
id INT(11) NOT NULL AUTO_INCREMENT,
// c1 datatype(length) -> length: 얼마까지 노출시킬지 정함,
// NOT NULL: 값이 없는 것을 허용안함,
// AUTO_INCREMENT: id 값 자동 +1(중복 방지)
title VARCHAR(100) NOT NULL,
// VARCHAR 문자열 데이터타입 선언
description TEXT NULL,
// TEXT 문자열 데이터타입 선언(본문이므로 많은 글자 수 필요)
// NULL: 값이 없는 것을 허용
created DATETIME NOT NULL,
// DATETIME 날짜 데이터타입 선언
author VARCHAR(30) NULL,
profile VARCHAR(100) NULL,
PRIMARY KEY(id));
// topic 테이블의 id 컬럼이 메인키라는 것을 선언, PRIMARY KEY 1.성능적 측면
2.중복을 방지
데이터베이스 규제 정책 덕분에 원하는 형식으로 깔끔하게 유지하는데 큰 도움
MySQL의 CRUD
어떤 DB를 막론하고 반드시 가지고 있는 작업
★Create★
★Read★
Update
Delete
수정과 삭제를 금하는 DB에서는 Update와 Delete는 없을 수도 있다.
SQL의 INSERT 구문
USE DATABASES;
SHOW TABLES; //사용하는 DB안의 테이블 출력
DESC topic; //DESC(describe) topic 테이블 나타내줌, 참고하여 작성하면 편함
-
INSERT INTO topic (title,description,created,author,profile) VALUES('MySQL','MySQL is ...',NOW(),'egoing','developer'); //topic 테이블 각 column에 row 데이터 삽입, id값을 안 넣은 이유는
//자동으로 증가하며 삽입,VALUES와 순서 맞춰줘야함, NOW()는 현재 시간 출력 함수 -
SELECT * FROM topic; //topic 테이블로부터 데이터 가져옴
VALUES값 바꿔 삽입하며 1 -> 2 과정 반복
DB table 생성과 삭제하는 경우는 드물다
INSERT, SELECT 가장 많이 사용되는 명령
SQL의 SELECT 구문
구선생 mysql selet syntax
SELECT id, title,created,author FROM topic WHERE author='egoing' ORDER BY id DESC LIMIT 2;
//적혀있지 않은 열들은 출력x,
WHERE을 사용하면 조건에 맞는 행만을 출력,
ORDER BY 원하는 행 오름차순,내림차순 정렬,
LIMIT는 데이터를 가져오는 수
DB는 SELECT 문을 필요에 따라 조건을 잘 사용하는 경우가 많다.
SQL의 UPDATE 구문
구선생 sql update mysql
UPDATE topic SET description='ORACLE is', title='Oracle' WHERE id=2;
//topic 테이블에서 description과 title 수정(column값), WHERE로 원하는 행(row)만 수정
WHERE 문을 빠트리면 열의 모든 행 값이 바뀌는 크나큰 재앙이 온다..
원하는 행만 수정하도록 꼭 넣어주자!
SQL의 DELETE 구문
구선생 SQL delete in mysql
DELETE FROM topic WHERE id =5; //DELETE 또한 WHERE 필수
WHERE를 안한다면.. 인생이 바뀔 수 있다..
섣부른 ENTER는 금지!
Relational Database
혁신 본질
innovation essence
관계형 데이터베이스의 필요성
데이터가 중복 되고 있다 -> 개선할 것이 있다
장점: 별도의 참조 데이터 테이블을 만들어 중복이 없는 뛰어난 퍼포먼스와 쉬운 유지 보수
단점: 별도의 표를 열어 비교해가며 봐야하기 때문에 직관적이지 않다
우리의 꿈 => 저장은 분산해서, 보여줄땐 합쳐서 => MySQL은 가능!
테이블 분리하기
RENAME TABLE topic TO topic_backup; //테이블 이름 변경
관계형 데이터베이스의 꽃 JOIN
SELECT * FROM topic LEFT JOIN author ON topic.author_id=author.id;
//topic 테이블과 join 테이블을 합친다. ON 조건 만족시키는 경우
SELECT id, title, description, created, name, profile FROM topic LEFT JOIN author ON topic.author_id = author.id;
//오류
SELECT topic.id, title, description, created, name, profile FROM topic LEFT JOIN author ON topic.author_id = author.id;
//정상 출력
->열에 id란 값이 2개 중복되므로 id->topic.id 로 열 구분을 해줘야함
SELECT topic.id AS topic_id, title, description, created, name, profile FROM topic LEFT JOIN author ON topic.author_id = author.id; //topic.id AS topic_id, AS를 이용해 이름 변경하여 출력 가능
테이블을 분리한다는 것은, 모든 테이블이 식별자 값만 행에 포함하고 있다면 JOIN을 통해 얼마든지 관계를 맺을 수 있다.
인터넷과 데이터베이스
client → Internet → server
client ← Internet ← server
mysql은 서버와 클라이언트 둘다 설치
mysql monitor(client)를 통해 명령어로 서버를 제어
이해하는 것이 아닌 익숙해지는 것
익숙해지는 방법이 이해와 암기
MySQL Workbench
Workbench GUI환경
※SQL을 MySQL 서버에 전송함으로써 데이터베이스 서버를 제어※
수업을 마치며
index(색인): 양적 완화의 구원 keyword, 사용자들이 검색을 자주 하는 컬럼에 색인을 걸어둠
modeling: 성능, 설계 상의 구원 keyword
backup: 내 컴퓨터와 별도의 컴퓨터에 복제해서 보관 ex)mysqldump, binary log
cloud: 내 컴퓨터가 아닌 큰 회사들의 인프라를 임대해서 원격 제어, backup도 알아서 해줌 ex)AWS RDS, Google Cloud SQL for
MySQL, AZURE Database for MySQL
programming: DB 서버 핸들링 ex) python mysql api, php mysql api, java mysql api
.
'Programming > DB' 카테고리의 다른 글
DATABASE1 - 생활코딩 (0) | 2020.06.03 |
---|
댓글