본문 바로가기
Programming/DB

DATABASE2 - MySQL - 생활코딩

by DONGKU 2020. 6. 4.

출처: 생활코딩 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 테이블 나타내줌, 참고하여 작성하면 편함

  1. INSERT INTO topic (title,description,created,author,profile) VALUES('MySQL','MySQL is ...',NOW(),'egoing','developer'); //topic 테이블 각 column에 row 데이터 삽입, id값을 안 넣은 이유는                 
    //자동으로 증가하며 삽입,VALUES와 순서 맞춰줘야함, NOW()는 현재 시간 출력 함수

  2. 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

댓글