[DB] MySQL

손시연·2022년 5월 13일
0

database

목록 보기
1/1

Inflearn - DATABASE 1&2 - MySQL (생활코딩)

DATABASE 1

데이터 관리 도구 -> 파일 관리 도구 -> database
database 종류 : MySQL, Oracle, SQL Server, PostgreSQL, MongoDB 등

  • CRUD : database 의 핵심 작업

    • input : Create, Update, Delete
    • output : Read
  • 스프레드시트를 통한 파일 내 데이터들 처리

    • 구조적으로 정렬
    • 데이터를 가공하기 쉬움, 한 눈에 파악하기 쉬움
    • 스프레드시트가 데이터베이스는 아니지만 그것의 장점을 느낄 수 있음
  • 관계형 데이터 베이스(Relational DBMS)

    • 스프레드시트(엑셀)처럼 정렬, 검색 등을 빠르고 편리하게 할 수 있음
    • Oracle : 규모가 큰 회사에서 사용하는 database, 신뢰성과 가격이 높음
    • MySQL : 무료 오픈소스
  • 관계형 데이터 베이스 X (Document store)

    • MongoDB 등
  • 요약

    • database 란?
    • database 의 핵심 작업 - CRUD
    • database 의 장점 - 스프레드시트 -> 가공하기 쉬움

DATABASE 2 - MySQL

MySQL

  • 스프레드시트 VS MySQL

    • 공통점 : 표를 통해 정리 가능, 정렬 검색 기능 제공
    • 차이점 : MySQL - 프로그래밍을 통해 데이터를 조작할 수 있음
  • MySQL 의 구조

    • 스키마(database) : 연관된 표를 grouping
    • database server : 스키마 grouping
  • database 장점

    • 자체적인 보안 체제 - file 보다 안전하게 데이터 보관 가능
    • 권한 부여 기능
  • SQL (Structured Query Language)

    • 구조화된(표 형태의) 쿼리 언어
    • database server 에게 SQL 로 명령을 함
    • 간단 & 중요
  • 관련 용어 정리

    • 표 = table
    • 수평(행) = row, record -> 데이터의 종류, 데이터의 자체
    • 수직(열) = column -> 데이터의 구조

[schema]

  • schema 생성 : CREATE DATABASE opentutorials
  • schema 사용 : USE opentutorials
  • schema 출력 : SHOW opentutorials

[table]

  • table 생성 (틀 생성)
CREATE TABLE topic(
id INT(11) NOT NULL AUTO_INCREMENT, 
title VARCHAR(100) NOT NULL,
description TEXT NULL,
created DATETIME NOT NULL,
author VARCHAR(15) NULL,
profile VARCHAR(200) NULL,
PRIMARY KEY(id)
);
  • id INT(11) NOT NULL AUTO_INCREMENT : id 컬럼, int 형으로 11자리까지 노출, 공백 허용 X, 자동으로 값 증가

  • title VARCHAR(100) NOT NULL : title 컬럼, VARCHAR 형 100자리까지 생성, 공백 허용 X

  • PRIMARY KEY(id) : 메인키는 id, 중복 불가능

  • table 출력 : SHOW TABLES

  • table 생성 후 확인 : DESC topic;

  • 참고) 검색을 할 때 cheat sheet 를 참고하면서 하면 좋다!

    • 예: "create table in mysql cheat sheet"

CRUD

  1. CRUD : Create, Read, Update, Delete

  2. INSERT (내용 생성)

INSERT INTO topic (title, description, created, author, profile) 
VALUES('MySQL', 'MySQL is ...', NOW(), 'egoing', 'developer');
  1. SELECT (출력)

    • 모든 데이터를 출력 : SELECT * FROM topic;
    • 선별하여 출력
      - id, title, author 데이터만 출력 : SELECT id, title, author FROM topic;
      - author가 engoing 인 데이터만 출력 : SELECT * FROM topic WHERE author='egoing';
    • 정렬
      - id 를 기준으로 내림차순(DESC) 정렬 : SELECT * FROM topic ORDER BY id DESC;
    • 출력 개수 제한
      - 상위 2개만 출력 : SELECT * FROM topic LIMIT 2;
  2. UPDATE (업데이트)

  • Oracle 정보 변경
  • WHERE 문을 작성하지 않으면 모든 데이터의 값이 변경되므로 주의해야 함!
UPDATE topic
SET description='Oracle is ...', title='Oracle'
WHERE id=2;
  1. DELETE (삭제)
  • id가 5인 행 삭제 : DELETE from topic WHERE id=5;

관계형 데이터베이스

[테이블 분리하기]
author_id 값에 대한 table 을 생성(TABLE author)하고 topic 의 author 에서는 author_id 값을 저장함

  • author table 생성
CREATE TABLE `author` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `profile` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`)
) 
  • author 데이터 입력
INSERT INTO `author` VALUES (1,'egoing','developer');
INSERT INTO `author` VALUES (2,'duru','database administrator');
INSERT INTO `author` VALUES (3,'taeho','data scientist, developer');
  • topic table 생성
CREATE TABLE `topic` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(30) NOT NULL,
  `description` text,
  `created` datetime NOT NULL,
  `author_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
)
  • topic 데이터 입력
INSERT INTO `topic` VALUES (1,'MySQL','MySQL is...',now(),1);
INSERT INTO `topic` VALUES (2,'Oracle','Oracle is ...',now(),1);
INSERT INTO `topic` VALUES (3,'SQL Server','SQL Server is ...',now(),2);
INSERT INTO `topic` VALUES (4,'PostgreSQL','PostgreSQL is ...',now(),3);
INSERT INTO `topic` VALUES (5,'MongoDB','MongoDB is ...',now(),1);

[JOIN]

SELECT topic.id AS topic_id, title, description, created, name, profile 
FROM topic LEFT JOIN author ON topic.author_id = author.id;
  • 모두 출력하지 말고 topic.id, title, description, created, name, profile 만 출력
  • topic.id AS topic_id : table 에 id 가 아닌 topic_id 로 변경되어 출력됨
  • topic LEFT JOIN author : topic table 을 중심으로 author table 합치기 진행
  • ON topic.author_id = author.id; : JOIN 기준

[관계형 데이터베이스의 장점]

  • table 분리의 장점
  • 수정, 관리 용이 - 하나하나 바꿀 필요 없음
  • 식별자 값을 포함하고 있다면 JOIN 을 통해서 관계를 맺을 수 있음

[인터넷과 데이터베이스]

  • database client <-> database server
    • database server 는 database client 가 있어야 동작함
    • database client : MySQL monitor, MySQL Workbench 등
      - MySQL monitor : 명령어로만 동작
      - MySQL Workbench : GUI(마우스로 조작 가능)로 동작

마무리

  • index : index 가 매우 많아질 때 색인 기능을 이용해서 이해하기 편하게 만들자
  • modeling : table 을 잘 설계하는 것이 프로그램 성능을 결정함
  • backup : 데이터를 복제해서 보관. 데이터 유실 가능성 낮음. 데이터 안정성.
    • mysqldump, binary log
  • cloud : 대기업 데이터베이스를 원격제어하여 이용가능. backup 을 알아서 처리해줌.
    • AWS RDS, Google Cloud SQL for MySQL, AZURE Database for MySQL
  • programming : database 를 기저에 두고 프로그래밍으로 활용해야 함
    • Python mysql api, php mysql api, java mysql api

추가

  • DAO : DB에 접근하기 위한 객체
  • DTO : 계층 간 데이터 교환을 위한 객체 - 순수 데이터 객체, getter setter 만 가짐
profile
Server Engineer

0개의 댓글