SONOTRI
  • [공부] MySQL 기초
    2024년 09월 02일 19시 28분 17초에 업로드 된 글입니다.
    작성자: sonootri

    1.개요

    file의 단점을 보완하기 위해 등장 전문적인 소프트웨어를 DataBase라고 한다.

    관계형DB를 사용하면 데이터들을 표 형태로 정리정돈 할 수 있고, 정렬/검색과 같은 작업을 빠르고 안전하게 할 수 있다.

     

    MySQL은 Relation Database 중 하나이다.

    웹이 폭발적인 성공을 하면서, 웹 개발자들은 웹 페이지를 통해서 표현할 정보를 저장할 데이터 베이스를 찾게 되었고, MySQL은 좋은 대안이었다.


    2. 데이터 베이스의 목적

    MySQL과 같은 관계형 데이터 베이스의 특징은 데이터를 표의 형태로 나타낸다는 것이다.

    MySQL과 스프레드시트(DB 아님)의 가장 큰 차이점은, MySQL은 명령어를 통해 제어할 수 있다는 것이다. 아직 코딩을 해본 적 없는 나는 아직 이 차이점이 얼마나 큰지 모른다.

     

    데이터 베이스를 구축하고 나면, 우리는 데이터 베이스에 저장된 데이터를 웹/앱을 통해 사람들과 공유할 수 있다. 인공지능이나 빅데이터를 활용해 분석하는 것도 가능하다.


    3. MySQL 설치 

    [MySQL] 0. MySQL 설치 방법과 설치 확인하기 (tistory.com)

     

    [MySQL] 0. MySQL 설치 방법과 설치 확인하기

    MySQL 설치 방법은 혼공 사이트에서 참고한 내용입니다. 개인공부 및 기록용으로 블로그에 따로 작성하였습니다. 출처: https://hongong.hanbit.co.kr/mysql-%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C-%EB%B0%8F-%EC%84%A4%EC%B9%9

    giveme-happyending.tistory.com


    4. MySQL의 구조

    데이터를 기록하는 최종적인 곳은 '표(table)'이다.

    웹 사이트를 운영하는 데이터를 데이터 베이스에 저장하면 표들이 많아질 것이다.  이에 따라, 많아진 표를 잘 정리정돈 할 필요성이 생기는 것이 문제가 된다.

     

    MySQL에서는 서로 연관되어있는 표를 그룹핑하여 연관되어있지 않은 표와 구분하는 기능이 있는데, 이것이 데이터베이스이다. 스키마라고도 한다. 스키마= 표들을 서로 그루핑할 때 사용하는 일종의 폴더... 정도로 이해하면 된다.

     

    MySQL을 설치한 것은, 데이터 서버를 설치한 것이고, 우리는 그 프로그램이 가지고 있는 기능성을 이용해 데이터와 관련된 여러 작업을 한다.

    • 데이터베이스 서버 = MySQL
    • 데이터베이스 = 표들을 그루핑 해놓은 것
    • 표 


    5. MySQL 서버 접속

    나는 그냥 MySQL Command Line Client에서 비밀번호를 입력했다. 그랬더니 'mysql>'프롬프트가 나타났고, 해당 프롬프트가 나타나면 MySQL Server에 제대로 접속된 것이라고 한다.

     

    강의에서 실행한 명령어는, 터미널이나 cmd 프롬프트에서 MySQL Client를 실행하고 싶을 때 사용한다. 애초에 나는 MySQL Command Line Client로 서버 접속을 시도했으므로 해당 명령어가 필요 없었던 것이다.

    mysql -uroot -p

    -> mysql: MySQL Client 프로그램을 실행하라는 명령어

    -> -uroot: root 사용자로 접속한다. -u는 사용자(user)을 지정하는 옵션이다

    -> -p: passwd를 입력할 수 있도록 프롬프트를 띄우라는 옵션


    6. MySQL 스키마(schema)의 사용

    검색을 통해 여러 명령어를 알아보는 것이 가장 중요하다. 명령어를 모두 기억할 필요는 없다.

     

    1) 데이터베이스 생성

    #CREATE DATABASE [schema name]

     

     

    2) 데이터베이스 삭제

    #DROP DATABASE [schema name]

     

     

    3) 이전에 사용했던 명령어를 재사용 할 때

    위쪽 화살표를 누르면 된다.

     

     

    4) 전체 데이터베이스 조회

    #SHOW DATABASES;

     

     

    5) 데이터 베이스를 사용하겠다는 것을 MySQL에게 알릴 때 = 사용할 데이터베이스를 선택할 때

    지금부터 내가 내리는 명령을 fruit라고 하는 데이터베이스에 있는 표를 대상으로 명령을 실행하게 된다.

    #USE [schema name]


    7. SQL 그리고 테이블 구조

    SQL(Structured Query Language)

    -> Structured: 표의 형태로 정리정돈 한다.

    -> Query: 데이터베이스에게 요청(질의)한다. 예를 들어, 수정해줘 추가해줘 삭제해줘 등등

    -> Language: 데이터베이스도 이해할 수 있고 나도 이해할 수 있도록, 공통의 약속에 따라 사용하는 언어

     

    SQL이라는 언어는, 관계형 데이터베이스 카테고리에 속하는 제품들이 공통적으로 데이터베이스 서버를 제어할 때 사용되는 언어. 표준화도 되어있다. 하지만 SQL은 쉬운 언어이다. 가성비가 좋은 언어이다.

     

    • 데이터베이스: 테이블, 스키마를 포함한 데이터의 전체 집합체
    • 스키마: 데이터베이스의 구조와 객체들을 정의하는 설계도
    • 테이블 = 표: 실제 데이터를 저장하는 2차원 구조로, 데이터베이스 내의 한 구성 요소이다.

    일반적으로 columm은 데이터의 타입, row는 데이터 하나하나를 의미한다.


    8. MySQL 테이블 생성

    create table mysql cheat sheet를 검색해서 관련 코드를 찾아봤다.

     

    스프레드시트와 MySQL의 아주 중요한 차이점은, 스프레드시트는 컬럼에 어떤 형태의 데이터든 넣을 수 있다는 것이다. 적은 양의 데이터를 관리할 때는 문제가 되지 않지만, 데이터의 양이 많아지면 문제가 될 수 있다. 그래서 데이터베이스는 컬럼의 데이터 타입을 강제할 수 있는 기능을 가진다.

     

    MySQL 데이터 자료형은 이 블로그에서 살펴보도록 하자.

    MySQL 자료형 타입 종류 / 개념 (velog.io)

     

    MySQL 자료형 타입 종류 / 개념

    관계형 데이터베이스는 엑셀처럼 표, 테이블 구조로 된 데이터들을 대량으로 저장하고 관리, 사용하기 위해 만들어졌다. 데이터들이 다 DB서버의 공간을 계속 차지하기 때문에 저장공간을 최대

    velog.io

     

    테이블을 생성하는 실습을 해보자.

    id값은 꼭 있어야한다. 나중에 삭제나 수정이 불가능하다. id가 없으면 찾을수가 없으니 어찌보면 당연한 말이다.

     

    Primary Key는 메인키를 알려주는 것으로, 두 가지 측면에서 볼 수 있다. 하나는 '성능적인' 측면이고 다른 하나는 '중복을 방지하는 측면'에서 볼 수 있다. id를 데이터를 식별할 수 있는 식별자로 쓰고싶기 때문에 각각의 값이 중복되게 하지 않도록 Primary Key로 지정한다.

    -> #CREATE TABLE [테이블 이름]([열 이름] [데이터타입] [조건] ); 새로운 테이블을 생성할 때 사용하는 명령어

    -> id라는 이름의 컬럼을 만든다.

    -> #INT(11): 정수값만 받을 수 있고, 최대 11글자까지 입력 가능하다

    -> #NOT NULL: 빈 값(널값)을 허용하지 않는다

    -> #NULL: 빈 값(널값)을 허용한다.

    -> #AUTO_INCREMENT: 각 행이 추가될 때마다, 값이 자동으로 증가한다

    -> #PRIMARY KEY(id): id 컬럼을 이 테이블의 기본키로 설정한다. 기본키는 테이블 내의 각 행을 고유하게 식별한다.

     

     

    #SHOW TABLES;를 치면 아까 만들었던 테이블을 확인할 수 있다.

     

    데이터베이스가 여러가지 규제 정책을 가지고있고, 규제 정책 덕분에 우리는 데이터를 깔끔하게 우리가 원하는 형식으로 유지하는데 큰 도움을 받고 있다.


    9. MySQL의 CRUD

    Create, Read, Update, Delete. 데이터가베이스가 가지는 네 가지 기능이다.

     

    Create와 Read는 데이터베이스라면 반드시 가지고 있는 기능이다. Update와 Delete는 없을 수도 있다. 어떤 분야에서는 해당 기능을 범죄시 하는 경우도 있기 때문이다. 예를 들어 역사.


    10. SQL의 INSERT 구문

    #DESC [테이블 이름]; 을 통해 테이블의 구조를 볼 수 있다.

     

     

    #INSERT INTO [테이블 명]([컬럼1],[컬럼2]...) VALUES('[값]','[값]'....);

    하나의 행이 영향을 받았다는 문구가 뜬다. Create를 한 것이다!

     how to read row in sql이라고 검색해서 우리가 추가한 것을 확인하자.

     

     

    #SELECT * FROM topic;

    해당 명령어는 topic 테이블의 모든 데이터를 조회한다.

    SQL에서 데이터를 조회할 때는 기본적으로 SELECT A FROM B를 사용한다. B로부터 A를 선택한다는 의미이다.

    *는 선택된 튜플의 모든 값들을 가져오려 할 때 사용된다.

     

     

    #SELECT title FROM topic;

    이렇게 *말고 특정 컬럼을 지정해 조회할 수도 있다.

     

    [SQL/MySQL] SELECT 데이터 조회 — HS_dev_log (tistory.com)

     

    [SQL/MySQL] SELECT 데이터 조회

    SELECT FROM SQL에서 데이터를 조회할 때는 기본적으로 SELECT A FROM B를 사용한다. SQL의 특징 중 하나는 사용하는 구문이 영어 그 자체와 비슷하다는 점이다. SELECT(선택한다) A를 , FROM B (B로부터)라고

    innovation123.tistory.com


    11. SQL의 SELECT 구문

    생각이 꼬이는 것 같아서 한 번 정리하고 넘어갔다.

    • 데이터베이스 서버 안에 fruit이라는 데이터베이스를 만들었다
    • fruit이라는 데이터베이스 안에 topic이라는 표(테이블)를 만들었다.
    • topic이라는 표 안에 id, description, created 등의 컬럼을 생성했다

    스프레드시트에서는 숨기고 싶은 컬럼은 hide를 통해 숨길 수 있다. 그렇다면 MySQL에서는 이런 작업을 어떻게 할 수 있을까?

     

    SELECT와 FROM 사이에는 projection이라고 하는, 표시하고 싶은 컬럼 목록들을 넣을 수 있다. profile을 표시하지 않도록 명령어를 작성해봤다.

    #SELECT id, title, created, author FROM topic;

     

     

    만약 author의 값이 egoing인 것만을 출력하고 싶으면 어떻게 해야할까? WHERE 문법을 뒤에 추가하면 된다.

    #SELECT id,title,created,author FROM topic WHERE author='egoing';

     

     

    정렬은 어떻게 할까?

    -오름차순 정렬: #SELECT * FROM topic WHERE author='egoing' ORDER BY id (ASC);

    -내림차순 정렬: #SELECT * FROM topic WHERE author='egoing' ORDER BY id DESC;

     

     

     

    데이터베이스에 데이터가 1억개 이상...이정도로 많이 쌓이면, 전체 조회를 할 경우 컴퓨터가 멈춰버리는 불상사가 발생할 수 있다. 그래서 출력할 데이터 갯수를 제한해서 출력할 수 있어야 한다.

     

    아래의 경우, 먼저 id를 내림차순 정렬해서 author의 이름이 egoing인 행들을 출력했다. 그리고 해당 명령어에 LIMIT 2를 추가로 작성하여 출력되는 데이터를 2개로 제한했다.

     #SELECT * FROM topic WHERE author='egoing' ORDER BY id DESC LIMIT 2;

     

     

    -> 데이터베이스를 잘 다룬다는 의미는, SELECT문을 필요에 따라 잘 사용하는 것이다. SELECT는 공부가 많이 필요하다.


    12. SQL의 UPDATE 구문

    id가 2인 행의 description 부분과 title 부분을 수정하려면 아래와 같은 명령어를 사용하면 된다.

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

     

    여기서 가장 중요한점은 WHERE을 사용해 UPDATE 범위를 지정했다는 것이다. WHERE을 쓰지 않으면, 테이블 내의 보든 행이 업데이트되는 대참사가 일어난다.

    • WHERE 절은 SQL에서 특정 조건을 만족하는 행망을 선택하여 작업을 수행할 때 사용된다. 이를 통해 원하는 데이터만 선택적으로 조회, 업데이트, 삭제할 수 있다. WHERE절이 없으면 쿼리가 테이블의 모든 행에 적용되므로, WHERE절을 통해 범위를 지정하는 것은 필수적이다.


    13. SQL의 DELETE 구문

    #DELETE FROM topic WHERE id=4;

    마찬가지로 WHERE은 필수적으로 써줘야 한다.

     

    ->SELECT문과 다르게 DELETE문은 *를 써주지 않아도 된다. DELETE문은 행 전체를 삭제하는 것이 목적이기 때문이다.

    SELECT의 경우는 *를 통해 모든 열을 선택하기 때문에 *가 필요한 경우가 존재한다.


    14. 수업의 정상

    Relation DataBase

    혁신(Innovation) ---- 본질(essence) = DateBase(CRUD)


    15. 관계형 데이터베이스의 필요성

    중복되는 데이터가 있다 = 개선할 것이 있다는 중요한 신호이다. 개선 작업을 거치면 유지보수가 전보다 쉬워지는 등의  장점이 있다. 단점도 있을수는 있다. 예를 들어 직관성이 없어는 등의.

     

     MySQL은 장점은 유지하면서 단점은 없앨 수 있는 강력한 무기로 작용할 수 있다.


    16. 테이블 분리하기

    명령어를 한번 더 정리했다. 헷갈려서ㅓ

    #SHOW TABLES;

     

     

    #CREATE DATABASE ClientList;

    clientlist라는 데이터베이스를 만들었다.

    헷갈리지 말것. 데이터베이스 서버는 MySQL이다.

     

     

    #USE clientlist;

    USE 명령어를 통해 테이터베이스를 선택한다. 데이터베이스를 선택한다는 것은 데이터베이스를 작업 대상으로 지정하는 것을 의미한다.

    이후 id, title 등의 컬럼을 가지는 테이블(표)를 만든다. 테이블 명을 management이다.

     

     

    #SHOW TABLES:

    명령어를 사용하여, 테이블이 제대로 만들어졌는지 확인한다.

     

     

    #DESC management;

    명령어를 사용하여 위에서 작성한 테이블의 구조를 확인한다.

     

     

    #SELECT * FROM management;

    명령어를 사용하여 테이블의 내용을 확인한다.


    <실습 환경 구성하기-강의 따라감>

    현재 존재하는 테이블은 topic_backup , topic 그리고 author이다. 실제로 사용하는건 topic 그리고 author

     

     

    author와 topic에 정보를 추가한다.

     

     

    각 테이블에 저장된 정보들을 보면 author테이블의 사용자 아이디가, topic 테이블의 사용자 이름 대신 사용되고 있는 것을 알 수 있다. 다음 강의에서 이 부분을 join할 것이다.


    17. 관계형 데이터베이스의 꽃 JOIN

    join을 통해, 각각의 독립적인 테이블을 읽을 때 마치 그 테이블이 하나의 테이블로 저장되어 있었던 것 같은 형태로 읽을 수 있다.

     

    #SELECT * FROM topic LEFT JOIN author ON topic.author = author.id;

     

     

    #SELECT topic.id,title,description,created,name,profile FROM topic LEFT JOIN author ON topic.author = author.id;

     

     

    #SELECT topic.id AS topic_id,title,description,created,name,profile FROM topic LEFT JOIN author ON topic.author = author.id;

    더 직관적으로 id를 topic id로 바꾸고 싶을 때는 AS를 사용한다.

     

     

    중복을 제거한다는 것은 정말 중요한 기술이다. 


    18. 인터넷과 데이터베이스의 관계

    인터넷 = 정보의 바다

     

    각각 흩어져 있는 컴퓨터들이 인터넷으로 연결되면서 컴퓨터들 간의 사회가 만들어진다. 사회가 만들어지고 난 후, 컴퓨터 한대가 가지고 있는 한계를 초월하게 되었다.

     

    인터넷 위에서 동작하는 컴퓨터들은 정보를 요청하는쪽과 응답하는쪽으로 나뉜다. Client와 Server이다.

    Client 컴퓨터는 Server 컴퓨터에게 요청을 한다[Web Client]. Server 컴퓨터는 Client 컴퓨터에게 응답한다[Web Server]

     

    MySQL을 설치하면, 데이터베이스 클라이언트와 데이터베이스 서버가 설치된다. 데이터베이스 서버에는 실제로 데이터가 저장되고, 데이터베이스 클라이언트를 통해 우리는 데이터베이스 서버에 접속할 수 있다.


    19. MySQL 클라이언트

    MySQL 서버가 있는 곳에 MySQL Moniter가 있다.

    MySQL Moniter는 명령어 기반 프로그램, MYSQL Workbench는 GUI기반 프로그램이다.


    20. MySQL Workbench

    나중에 사용할 때 다시 와서 쓰자

    요거


    21. 수업을 마치며

    관계형 데이터베이스의 공식 언어는 SQL 이다. 따라서 SQL을 잘 이해하고 잘 사용할 수 있어야 한다. 

    CREATE, SELECT..등 계속 연습해야한다.

     

    -index(색인)을 잘 사용하면, 데이터를 찾을 때 굉장히 빠른 속도로 찾을 수 있다.

     

    -modeling....나중에 데이터량이 증하함에 따라 테이블을 만드는 것이 고민이 될때 찾아보자.

     

    -backup.. 예측할 수 있는 문제를 방어하기 위해 미리미리 백업을 해 두자. 

    ex. mysqldump 등

     

    -cloud... 대형 회사가 운영하고 있는 인프라 위에 있는 컴퓨터를 임대해서 사용하는 것을 클라우드 컴퓨팅이라고 한다. 컴퓨터는 나에게 있는 것이 아니라 회사에 있고, 우리는 원격 제어를 통해 사용한다.

    ex. AWS RDS, Google Cloud SQL for MySQL 등

     

    -programming언어로 데이터베이스 서버의 SQL을 던져줄 수 있는 방법 공부하기.

    자신이 사용하는 언어 뒤에 mysql api라고 검색하면, 그 언어로 그 데이터베이스 시스템을 쉽게 핸들링 할 수 있는 조작 장치/방법 등을 알 수 있다.

    ex. Python mysql api, PHP mysql api, Java mysql api 

     

    'STUDY > web' 카테고리의 다른 글

    DVWA 구축(Kail Linux)  (0) 2024.10.06
    [공부] Port & IP & Port Forwarding  (0) 2024.09.12
    HTML & Internet  (3) 2024.09.05
    [빡공팟 Web Hacking Track] OT  (0) 2024.08.14
    댓글