Node.js 교과서'라는 책을 통하여 공부.
22.01.17(월)까지 공부한 내용을 기록.
290p ~ 346P
2학년때 학교에서 데이터베이스(DB)강의를 들었었다. 기말고사로 MySQL 코딩테스트를 봤었는데 스키마(k-league)가 주어지고 문제가 요구하는 쿼리문을 작성하는 것 이었다. 나름 열심히해서 A+맞긴 했었는데.. 확실히 계속 안보니까 까먹는거 같다. 그때는 진짜 대부분 쿼리문 다 만들 수 있었는데.. 일단 지금 배우는 단계에서는 그닥 어려운 쿼리문을 사용하지는 않는 것 같다. 책보면서 공부하니까 그래도 그때 배경지식이 있어서 그런가 조금씩 기억나면서 이해가 조금 빠르다. 그래서 좋다. 지금 우연치않게, node.js랑 django공부를 같이 하고있는데 직접적으로 쿼리문을 적지는 않고, ORM을 통해서 하기때문에 중요 CRUD들이 어떻게 로직이 도는지만 간단히 정리해 놓으려고 한다.! 이번주 공부는 많이했는데 블로그에다가 글은 못썼다. 이번주말 이용해서 밀린거 차근차근 써 나갈 예정이다!!
난 MySQL 사용하고 있고, 워크벤치 사용하고 있다!
#테이블 만들기
테이블은 게시물을 저장하는 테이블을 만든다는 전제로 'posts' 테이블을 만들어 볼 생각이다! posts테이블에는 id,author(저자),title(제목), body(내용), created_at(생성일)을 넣을 것이다.
CREATE TABLE posts(
id INT NOT NULL AUTO_INCREMENT,
author VARCHAR(20) NOT NULL,
title VARCHAR(50) NOT NULL,
body TEXT NOT NULL,
created_at DATETIME NOT NULL DEFAULT now(),
PRIMARY KEY(id)
) ENGINE=InnoDB CHARSET=utf8;
이렇게 코드를 작성하면 코드가 만들어진다. created_at에 준 속성들은 생성시간을 속성으로 넣으라는 것이고, 난 모든 칼럼들을 NOT NULL속성을 줬다. NULL이면안된 다는 뜻이다.
show tables;
--------
SELECT *
FROM posts;
이렇게 각각 실행해보면, 현재 존재하는 테이블과 만들어진 posts테이블 안에 어떠한 값도 없는 초기상태임을 확인 할 수 있다.
만약 테이블을 지우고 싶다면
DROP TABLE posts;
을 하면 posts테이블이 삭제된다.
#본격 CRUD 다뤄보기
##CREATE(생성)
데이터를 방금 만든 posts에 넣는 것, 그것이 CREATE이다. 이게 프론트에서는, 글쓰기창을 누르고 제목,이름,내용을 적고 글쓰기 버튼을 누르면 이 정보들이 서버로 넘어가 데이터베이스에 담겨지게 될 것이다. 엄청 간단하다!
INSERT INTO posts (author,title,body) VALUES ('호준', '블로그를 위해 작성중', '코딩은 재밌어!');
id와 created_at은 자동으로 채워준다.
INSERT INTO posts (author,title,body)
VALUES ('호준', '두번째 게시물입니다.', '코딩은 재밌는게 맞는걸까?!');
아주 만족스럽게 들어간다.
##READ(조회)
조회는 본격 쿼리문을 작성해서 내가 원하는 데이터들만 뽑아 내는 것이다. where를 이용해서 조건을 걸 수도 있다.
SELECT *
FROM posts
WHERE id = 2;
보통 이렇게 SELECT FROM WHERE를 많이 사용한다. FROM 에서 테이블을 정하고, WHERE에서 조건을 만족하는 SELECT 열을 뽑아내는 로직이다. 위 코드를 실행하면 아마, id 값이 2인 posts테이블의 행을 출력해줄 것이다.
ORDER BY 에서 오름차순 내림차순을 결정해 줄 수 있고, LIMIT로 몇개의 값들만 가져올지 결정할 수 있고, OFFSET으로 몇번째부터 몇번째가지 뽑아 올 수도 있다. 게시판에서는 이런 기능을 많이 활용할 것 같다.
예를 들면, 게시판은 항상 최신글이 위로 오게 되니까, 생성일을 기준으로 내림차순 정렬이 필요할 것 같다.
SELECT *
FROM posts
ORDER BY created_at DESC;
보통 글 목록은 모든 데이터를 가져오게 보여주기 보다는, < -- 1 -- 2 -- 3 -- 4 -- > 이런식으로 1번페이지에 10개 2번페이지에 10개씩 보여준다. 내가 얼추 알기로는 모든데이터를 가져와서 백서버에서 처리해주면 상당히 느려지고 비효율적이라고 알고 있고, DB쿼리문 자체에서 필요한 만큼만 뽑아오는게 좋다고 한다!
SELECT *
FROM posts
ORDER BY created_at DESC
LIMIT 2;
이제 이렇게하면 맨위에 두개만 보인다. 이렇게 첫번째 페이지를 보여주고, 두번째페이지에는 2번과 1번 id를 가진 글을 보여주면 될 것 같다.
SELECT *
FROM posts
ORDER BY created_at DESC
LIMIT 2
OFFSET 2;
이런식으로 말이다! 한마디로 LIMIT는 출력할 행의 갯수, OFFSET은 출력할 행(데이터)의 시작점이다. 기본값은 0이고 맨위가 0이다. 그래서 id=2인 데이터는 3번째 행이기 때문에, OFFSET 2를 준 것이었다.
##UPDATE(수정)
UPDATE posts
SET body = "이건 수정한 내용입니다"
WHERE id=2;
이렇게 수정할 행을 WHERE절에 걸어주고, 수정할 열(column) 즉 여기서는 body(내용)을 지정해서 바꿔주면 된다.
이렇게 수정 됐다.
##DELECT(삭제)
삭제 또한 간단하다.
DELETE
FROM posts
WHERE id=2;
삭제 됐다. 삭제 옵션에서도, 해당 데이터와 연관된 테이블의 값들도 지워주는 옵션이 아마 있다. 내가 포스팅한 곳에도 있을 수도 있을것 같은데 CASCADE 옵션을 주는건가 그랬던 것 같다. 이건 확실하지 않다..
CRUD 끝났다. 사실 이 코드를 ORM을 이용하기 때문에 쓰지 않는데 콘솔 보면 이와 같은 코드들이 찍혀있는 모습을 볼 수 있다. 알면 당연히 좋을 것이고, 좀 특수한 쿼리를 짤때는 꼭 쿼리 사용법을 알아야할 필요가 있다.
'• 데이터베이스(DB) > __SQL__' 카테고리의 다른 글
#7 [DML] MySQL의 다중행 함수중 GROUP BY, HAVING, ORDER BY, LIMIT 사용하기 (0) | 2021.05.31 |
---|---|
#6 [DML] MySQL에서 내장함수 중 단일행 함수 사용하기, CASE절이란? (0) | 2021.05.29 |
#5 [DML] MySQL에서 WHERE 조건식 사용해보기 IN,LIKE,IS NULL,BETWEEN (0) | 2021.05.25 |
#4 [DML] MySQL에서 SELECT 사용해보기 (0) | 2021.05.25 |
#3[DML] MySQL 에서 INSERT, DELETE, UPDATE 문을 사용해보기, sql_Safe_Updates모드 (0) | 2021.05.25 |