DataBase와 MySQL을 알아보자

sanghun Lee·2020년 12월 18일
0

Today I Learned

목록 보기
59/66


출처: 생활코딩

1. DataBase?

데이터를 저장하는 가장 기본적인 단계인 파일에서 복잡하고 대량의 저장을 위한, 보안이나 용량의 한계를 보완하기 위한것이 database이다.

파일과 엑셀을 통해 정리된 데이터정리를 비교해서 생각해보면 쉽다.

데이터베이스는 여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합이다. 작성된 목록으로써 여러 응용 시스템들의 통합된 정보들을 저장하여 운영할 수 있는 공용 데이터들의 묶음이다
from)나무위키

관계형 데이터베이스가 제일 대중적이며 이는 제품군이다.
-> Ex) 예는 ORACLE, MONGODB(얘는 아님), MYSQL등이 존재한다 :)..


데이터베이스의 입력과 출력을 깨달으면 된다

  • 입력 : Create , Update, Delete
  • 출력: Read

위의 것들만 깨달으면 쉬워진단다.

2. Install& Use MySQL

터미널코드에 대한 내용은 아래와 같다.

ChangeDirectory to /usr/local/mysql/bin/

use mysql with root user and password

MySQL(관계형데이터)의 구조

일단 엑셀과 같은 구조를 가지고 있으니 최종 형태는 표(table)이다.

데이터베이스라고 되어있지만 이게 스키마(schema)와 동일함.
-> 표(table)들을 서로 그루핑(grouping)하는 일종의 폴더라 생각하자

database server가 위의 내용들을 가지고 있는 건데
MySQL을 설치한것이 dbserver를 설치한것이라 생각하면 된다.

출처: 생활코딩

3.SQL(Structured Query Language)

  • Query: 데이터베이스에게 요청하는 뭐 그런거다.

그러니까, SQL은 MySQL Server와 이야기 하기 위한 언어인데 쉽다.

다수의 DB Server가 SQL을 통해서 동작하기에 알면 너무나 좋다. :)

table 관련 용어는 row(행), column(열)이 있다

3-1 테이블 생성해보기

create table in mysql cheat sheet

; 치고 엔터치면 실행됨

유저가 어떤 데이터를 넣을지 모르기 때문에 각 컬럼마다 데이터타입을 강제할 수 있다.

데이터타입은 아래와 같다.

CREATE TABLE topic(
	id INT(11) NOT NULL AUTO_INCREMENT,// 테이블 만들고, id 컬럼의, 자료형은 int이며, 값은 11개 까지만 노출해줌(11이대중적이라고한다), 값 없는건 허용안함, 자동으로 증가분류(아 단어 기억이안나..)한다.
    title VARCHAR(100) NOT NULL,// title컬럼은 variable character로 만들고, 100글자만 보이게한다, 공백 허용 X
    description TEXT NULL, 
    created DATETIME NOT NULL,
    author VARCHAR(30) NULL,
    profile VARCHAR(100) NULL,
    PRIMARY KEY(id)); //제일 중요한 키 컬럼은 id로 하고 중복을 받지않는 방법이다.

4.순서정리

이제는 쿼리를 날려서 저 DB에 있는 topic이라고 이름지어진 Table에서 정보를 가져오면 된다.

순서를 다시한번 정리해보자

  1. CREATE DATABSE dbstudy default CHARACTER SET UTF8;
    -> 위 코드를 통해 'dbstudy'라는 DB를 만들었다.

  2. USE dbstudy
    -> 를 통해 해당 DB를 사용하도록 했다.

  3. 그리고 3-1의 코드처럼 CREATE TABLE topic(...); 을 이용하여 topic이라는 이름의 Table을 만들었다.

  4. SELECT dbstudy를 하고 show tables;를 통해 위의 그림과 같이 최종 DB를 확인할 수 있다.

  5. DESC topic(table 이름)을 하게 되면 테이블 구조를 보여준다

5.CRUD

5.1 Create(INSERT)

참고

INSERT INTO tableName (key) VALUES (value); 를 적어서 넣으면 된다.

5.2 Read(SELECT)

SELECT * FROM tablename(나는 topic)을 통해 모든행을 출력하여 Read 할 수 있다.

SELECT column titles FROM tableName; 을 통해 보고싶은 것만 볼 수 있다.
ex) SELECT id,title,created,author FROM topic;

필요한것만 찾아보기 위해서는 아래와 같이 하면 된다.

SELECT column titles FROM tableName WHERE title ="sth"

SELECT column titles FROM tableName WHERE title ="sth" ORDER BY id DESC LIMIT 2
-> 두가지만 뽑아오고 역순으류 정렬 & 필요한 title명만 들고오기

5.3 Update(UPDATE)

UPDATE, SET, WHERE 문을 통해 필요한 column의 변경을 할 수 있다.

  • WHERE문은 필 수 !

5.4 Delete(DELETE)

DELETE문을 사용하면 된다
WHERE은 꼭하자 아니면 재앙이다

6.테이블 분리하기 :)

관계형 데이터베이스에서 JOIN은 이를 이용하여 연결된 테이블을 이용해 새로운 테이블을 만들어 볼 수 있는 핵심 개념이다.(관계를 만들어주잖아!)

기존 연습 샘플은 백업으로 이름을 변경했다
RENAME명령어 사용

그리고 author와 topic이라는 테이블을 생성하여 중복되는 테이블 내용을 나누는 작업을 한다.

그 뒤에 JOIN을 이용하여 이를 결합하여 Read해본다.

여기서 필요한 내용의 값들만 보고싶으면 * 이 아닌 실제로 입력을 해주면 되는데
id의 경우 겹치게 되므로 topic.id 등을 통해 실제로 구분할 수 있게 만들어주면 된다.

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

AS를 이용하여 다르게 표현한 뒤 읽을 수도 있다.

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

7. DataBase Server, DataBase Client

요청하는 쪽이 Client, 응답해주는 쪽이 Server이다.

그 중간에 매개체가 인터넷이라 생각하면 편하다 :)

그러니까 database client인 내가(개발자가) 터미널이나 워크벤치등을 통해서 (mysql monitor) database client로서 이것을 통해 명령어를 이용하여 DataBase Server를 작동시키는 것이다.

추후에 이를 활용하여 DB를 짜게 되면 글을 추가해봐야겠다

언제나 감사한 생활코딩 덕분에 또 지식이 늘었다 :)


추가 공부

디비를 어떻게 만들어 볼까?

일단 사용하는 tool은 똑같이 mysql과 mysql workbench, node를 통해 백엔드 서버와 연결하는 것 까지 진행할 것이다.

aquerytool을 통해 간단한 db스키마를 구현하고

ALL Table Create SQL을 선택하면
전체를 선택한 뒤 text파일을 다운받을 수 있게 된다.

고것을 myslq중 만들어 놓은 db를 선택하여 복사 붙여넣기 해주면 원하는 db가 생성된다

나는 node라는 데이터베이스에 저장하였다

이렇게 필요한 것을 생성해 넣었다.

어떻게 Node와 연결할까

require를 통해 필요한 express와 mysql모듈을 들고 온뒤
connect, get, query등의 메서드를 활용하여 연결하면 끝이다.

createConnection메서드 사용시에는 host, user ,pw, database이름 등을 기재 해 넣어주면 연결이 된다 :)

그 전에 일단 mysql자체 서버를 켜놓아야한다!

에러들

mysql이 나의 개인맥에는 다운되어있지 않다는 것을 이제서야 확인했다

아래와 같은 오류가 계속 발생하였고

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

아래와 같은 해결책을 통하니 작동이 되었다.

sudo chown -R _mysql:mysql /usr/local/var/mysql

끝!

profile
알고리즘 풀이를 담은 블로그입니다.

0개의 댓글