본문 바로가기
타입스크립트로 함께하는 웹 풀 사이클 개발(React, Node.js)/TIL

웹 풀사이클 21일차 - MARIADB로 게시판 만들기

by 슈크림 붕어빵 2023. 12. 22.

mariadb로 만들어보기

1. 테이블 만들기

CREATE TABLE users( 
	id INT NOT NULL AUTO_INCREMENT, 
	name VARCHAR(30) NOT NULL, 
	birth DATE, 
	PRIMARY KEY (id) );

확인해보기

  • SHOW tables;
  • DESC users

 

CREATE TABLE posts(
    -> id INT NOT NULL AUTO_INCREMENT,
    -> title VARCHAR(30) NOT NULL,
    -> content VARCHAR(200) NOT NULL,
    -> created_at TIMESTAMP DEFAULT NOW(),
    -> PRIMARY KEY(id));

 

AUTO_INCREMENT : INSERT할 때 입력해주지 않아도 자동으로 ID가 올라간다.

NOT NULL: INSERT할 때 입력하지 않으면 안된다. NULL로 INSERT하면 안된다.

name이 NOT NULL인 경우

 

 

DEFAULT : 값이 안들어올 때, 기본값으로 세팅

  • DEFAULT  NOW(): INSERT할 때 입력하지 않으면 현재 시간으로 들어간다.

 

시간

1. DATE 

날짜

YYYY-MM--DD

2.DATETIME : 

날짜+시간

YYYY-MM-DD HH:MM:SS(24시간제)

3. TIME

시간

HH:MM:SS

4.TIMESTAMP : 자동입력을 도와줌

날짜+시간

YYYY-MM-DD HH:MM:SS(24시간제)

 

UTC: 한국 시간 -9 

 

DATETIME VS TIMESTAMP

DATETIME은 자동입력이 안되고 TIMESTAMP는 자동입력이 된다.

2. 데이터 삽입하기

INSERT INTO posts (title,content) VALUES ("생활 꿀팁","여행 꿀팁");
  • AUTO_INCREMENT인 id는 자동으로 1씩 올라감.
  • DEFAULT  NOW() 인 created_at은 하나씩 자동으로 현재 시간이 기록됨.

3. 컬럼 추가하기 - 정보 수정하기(UPDATE) , FK 설정

3-1) 수정일자 추가 - update할 때 시각

ALTER TABLE posts
ADD COLUMN updated_at DATETIME
DEFAULT NOW()
ON UPDATE NOW();

 

 

결과는 위와 같다. update될 때의 timestamp가 들어간다.

 

원래 updated_at은 비어있었기 때문에 현재 시각이 updated_at으로 들어갔다.

 

update해서 확인해보기

UPDATE posts SET content = "여행 기록" WHERE id = 2;

 

3-2) user_id 추가 - FK

 

  • 컬럼 추가
 ALTER TABLE posts 
 ADD COLUMN user_id INT;

  • user_id를 FK로 
ALTER TABLE posts 
ADD FOREIGN KEY(user_id)
REFERENCES users(id);

KEY가 MUL로 바뀐 것을 볼 수 있다.

 

4. JOIN

가상으로 테이블을 만들어서 보여주는 Join

 SELECT * FROM posts 
 LEFT JOIN users 
 ON posts.user_id = users.id;

 

참고

 

INNER JOIN : 교집합

OUTER JOIN : 합집합

 

LEFT OUTER JOIN

SELECT * 
from A LEFT OUTER JOIN B on A.a = B.b;

A의 모든 행과 B의 A와 공통인 행을 뽑는다.

 

RIGHT OUTER JOIN

SELECT * 
from A RIGHT OUTER JOIN B on A.a = B.b;

 

A에서 B와 공통된 부분과 B의 모든 정보가 포함된다.

 

FULL OUTER JOIN

MYSQL에서는 지원하지 않는다. UNION으로 공통되지 않은 행은 NULL 처리를 해서 이용해보자.