Post

데브코스 TIL - Day 23

23년 12월 19일 강의를 들은 내용과 추가로 학습한 내용을 기록한 글입니다.

실습 - DB 테이블 생성해보기 (CLI)

mysql docs

지난시간에 작성했던 게시글 DB 테이블 생성하기

1. “board” 스키마 생성

1
2
3
CREATE DATABASE board;

USE board;

2. 사용자 테이블 생성

1
2
3
4
5
6
7
CREATE TABLE users (
  id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(30) NOT NULL,
  job VARCHAR(100) ,
  birth DATE,
  PRIMARY KEY (id)
);
1
2
3
SHOW TABLES;

DESC users;

USER TABLE

3. 사용자 테이블에 데이터 삽입

1
2
3
4
5
INSERT INTO users (name,job,birth) values(
  'Lee Kwang-Soo',
  'actor',
  '1985-07-14'
)

4. 게시글 테이블 생성

  • TIMESTAMP: 기본 날짜형을 확장한 자료형
  • DEFAULT CURRENT_TIMESTAMP
    • MySQL v5.6.5 이상일 경우
1
2
3
4
5
6
7
CREATE TABLE posts (
  id INT NOT NULL AUTO_INCREMENT,
  title VARCHAR(100) NOT NULL,
  contents VARCHAR(2000) ,
  createdAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (id)
);
1
2
3
SHOW TABLES;

DESC posts;

POSTS

5. 게시글 테이블에 데이터 삽입

1
2
3
4
INSERT INTO posts (title,contents) values(
  '나는 개그맨',
  '이 아니라 배우입니다',
);

테이블조회

5. 게시글 테이블에 수정일자 추가

1
2
3
4
ALTER TABLE posts
ADD COLUMN updateAt DATETIME
DEFAULT NOW()
ON UPDATE NOW();
1
DESC posts;

수정일자 추가

7. 게시글 테이블 id 2 수정

UPDATE posts
SET content = "updated"
WHERE id = 2;

8. 게시글 테이블에 작성자 컬럼 FK 추가

  • user_id 컬럼 추가하기
1
2
ALTER TABLE posts
ADD COLUMN user_id INT NOT NULL;
  • FK 추가하기
1
2
3
ALTER TABLE posts
ADD FOREIGN KEY (user_id)
REFERENCES users (id)

결과 foreign key

9. JOIN()

두 개의 테이블을 묶어서 하나의 결과를 출력하는 명령어

  • 게시글의 사용자 번호와 사용자의 사용자 번호가 같으면 join()해 줘
1
2
select * from posts LEFT
JOIN users ON posts.user_id = users.id

결과 join하기

  • 사용자 번호는 빼고 합치기
1
2
select (posts.id, title, content,createdAt,updatedAt, name,job,birth) from posts LEFT
JOIN users ON posts.user_id = users.id

결과 원하는 값만 조인

학습한 내용 정리

MYSQL 날짜/시간 타입

■ DATE

  • 날짜만
  • YYYY-MM-DD

■ DATETIME

  • 날짜 + 시간
  • YYYY-MM-DD HH:MM:SS (24시간)

■ TIME

  • 시간
  • HH:MM:SS

■ TIMESTAMP

  • 날짜+시간
  • 시스템 시간대 정보에 맞게 일시를 저장
  • YYYY-MM-DD HH:MM:SS (24시간)

DateTime vs TIMESTAMP

DATETIMETIMESTAMP
1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 사이의 데이터를 지원1970-01-01 00:00:01 ~ 2038-01-19 08:44:07까지의 데이터만 지원
변환되어 저장하지 않음현재 시각 → UTC 시각으로 변환되어 저장
문자형숫자형
8byte4byte
날짜 직접 입력자동 입력 가능 (CURRENT_TIMESTAMP)

※ UTC 시각 : 한국 시간 -9

NOT NULL, DEFAULT

NOT NULL

  • NULL을 입력하지 못하게 하는 명령어

DEFAULT

  • 값이 안들어올 때, 기본값으로 세팅
  • DEFAULT를 사용하고 싶다면 공란으로 작성
  • NULL을 작성하면 기본값으로 세팅되지 않고 NULL이 세팅됨

JOIN

두 개의 테이블을 묶어서 하나의 결과를 출력하는 명령어

두개의 테이블을 조인하기 위해서는 기본키(PK), 외래키 (FK)관계로 맺어져 있어야한다.

  • INNER JOIN (내부 조인): 두 테이블에 모두 지정한 열의 데이터가 있어야 한다.
  • OUTER JOIN (외부 조인): 1개의 테이블에만 데이터가 있어도 결과가 나온다.
  • CROSS JOIN (상호조인): 한쪽 테이블의 모든 ㅎ애과 다른 쪽 테이블의 모든 행을 조인한다.
  • SELF JOIN (자체조인): 자신이 자신과 조인한다.

Alt text

참고 사이트

This post is licensed under CC BY 4.0 by the author.