https://myeongsu0257.tistory.com/226
토이프로젝트 유튜브2(채널 API 리팩토링)
https://myeongsu0257.tistory.com/225 토이프로젝트 유튜브1(회원API설계), router 유튜브 회원 로그인 회원가입 회원정보조회 회원탈퇴 회원은 계정 1개당 채널 100개를 가질 수 있다. 채널 채널 생성 채널 수
myeongsu0257.tistory.com
저번 포스팅까지 해서 회원 API와 채널API를 만들었습니다. 하지만 지금까지는 그저 db라는 맵겍체를 생성해서 데이터를 임시적으로 저장하고 활용하는 방법밖에 하지 못했습니다. 그래서 오늘은 MariDb에 데이터를 생성하고 활용해보겠습니다.
먼저 db입니다.
순서
- mariadb 접속
- Board 스키마 생생
- CREATE DATABASE Board
- USE Board
- 사용자테이블 생성
- 사용자데이터 데이터 삽입
- 게시글테이블 생성
- 게시글데이터 데이터 삽입
사용자 테이블
사용자번호 | 이름 | 직어 | 생년월일 |
1 | 공유 | 영화배우 | 800123 |
2 | 이동욱 | 유튜버 | 820105 |
3 | 공유 | 영화배우 | 830501 |
4 | 김고은 | 영화배우 | 850101 |
게시글 테이블
게시글번호 | 제목 | 내용 | 작성일자 | 수정일자 | 사용자번호(PK) |
1 | 나는 도깨비 | 안녕하세요 | 2024-01-01 | 2024-01-16 | 1 |
2 | 나는 저승사자 | 나는 저승사자임 | 2024-01-15 | 2024-01-16 | 2 |
3 | 나는 카누타는도깨비 | 카누 맛있다. | 2023-12-25 | 2024-01-16 | 1 |
4 | 낚시하는도깨비 | 낚시무서워 | 2024-12-01 | 3 | |
5 | 예쁜 고은이 | 나는 예쁘다 | 2024-02-01 | 4 | |
6 | 예쁜 고은이 | 나는예쁘다 | 2024-02-01 | 4 |
mariadb접속
먼저 이전에 Docker에서 Mariadb를 설치했었어서 Mariadb에 접속해주겠습니다.
- docker exec -it mariadb /bin/bash
- mariadb -u root -p
- root 입력
하시면 mariadb에 들어올 수 있습니다.
Board 스키마 생성
- CREATE DATABASE Board
- USE Board
사용자 테이블 생성
CREATE TABLE users(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(30) NOT NLL,
job VARCHAR(100),
birth DATE,
PRIMARY KEY(id)
);
게시글테이블 생성
생성시간은 게시글이 생성되는 시간 기준으로 찍고싶어서 TIMESTAMP를 사용해주었습니다. 수정일자는 이후에 추가하주도록 하겠습니다.
CREATE TABLE posts(
id INT NOT NULL AUTO_INCREMENT,
title VARCHAR(100) NOT NULL,
contents VARCHAR(2000),
created_at TIMESTAMP DEFAULT NOW(),
PRIMARY KEY(id)
);
사용자 테이블 데이터 삽입
INSERT INTO users(name , job, birth) VALUES("gongu", "actor", "1980-01-23");
채널 테이블 데이터 삽입
INSERT INTO posts(title, contents) VALUES("title1", "content1");
MYSQL (mariadb)
- DATE
- 날짜만
- YYYY-MM--DD
- DATETIME
- 날짜+시간
- YYYY-MM-DD HH:MM::SS (24시간제)
- TIME
- 시간
- HH:MM:SS
- TIMESTAMP
- 날짜 + 시간
- YYYY-MM-DD HH:MM:SS(24시간제)
게시글 테이블에 수정일자 추가
수정일자는 게시글이 생성될때 데이터가 생기면안되고 UPDATE될때 생성이 되어야합니다. 그래서 ON UPDATE NOW()를 추가해줍니다.
ALTER TABLE posts
ADD COLUMN updated_at DATETIME
DEFAULT NOW()
ON UPDATE NOW();
한번 데이터값을 넣어보겠습니다.
확인해보면 updated_at 컬럼에 값이 있는 걸 볼 수 있습니다. 우리가 예상했던 결과와는 다른 결과입니다.
한번 update해보겠습니다.
방금 만든 데이터를 수정해보겠습니다.
UPDATE posts
SET contents = "updated!"
WHERE id=2;
방금 업데이트 한 시간으로 잘 업데이트 됩니다.
게시글 테이블에 작성자 FK 추가
FK추가하기전에 먼저 게시글테이블에 FK가 될 컬럼을 하나 생성해주겠습니다.
ALTER TABLE posts ADD COLUMN user_id INT;
이제 FK를 추가해주겠습니다.
ALTER TABLE posts
ADD FOREIGN KEY(user_id)
REFERENCES users(id);
그리고 desc로 해당 테이블을 확인해보면 user_id의 KEY에 MUL이라고 써져있습니다. MUL은 Multiple의 약자로 중복이 될 수 있기 때문에 Multiple이라고 합니다.
이제 user_id도 함께 insert해주겠습니다.
INSERT INTO posts(title, contents, user_id) VALUES("title3", "content3", 1);
값이 잘 들어간것을 확인할 수 있습니다.
JOIN
지금 2개의 테이블이 각각 존재하여 한번에 볼 수 가없습니다. 이럴때 JOIN을 사용하여 SELECT할때만 합쳐져서 보이게 할 수 있습니다.
SELECT * FROM posts LEFT JOIN users ON (posts.user_id=users.id);
'백엔드 > node.js(express)' 카테고리의 다른 글
토이프로젝트 유튜브4(회원API,채널API sql적용) (1) | 2023.12.22 |
---|---|
토이프로젝트 유튜브3(DB생성,express-db연동,db모듈화) (0) | 2023.12.20 |
토이프로젝트 유튜브2(채널 API 리팩토링) (2) | 2023.12.18 |
토이프로젝트 유튜브1(회원API설계), router (0) | 2023.12.18 |
핸들러란, 상태코드,예외처리 (1) | 2023.12.15 |