데브코스/강의 정리

5주차 데이터 베이스 CLI

케케_ 2024. 9. 14. 13:13

SQL 외우지마 - (약속)

명령어 : 대문자

테이블 이름 : 첫글자는 대문자

 

1. "board" 스키마 생성

CREATE DATABASE Board;   // 방 만들기

USE Board;   // 방 들어가기

 

2. 사용자 테이블 생성

CREATE TABLE users (

  id INT NOT NULL AUTO_INCREMENT,

  name VARCHAR(30) NOT NULL,

  job VARCHAR(100),

  birth DATE,  // "YYYY-MM_DD"

  PRIMARY KEY (id)

);

 

3. 사용자 데이터 삽입

INSERT INTO users (name, job, birth)

VALUES ("gonhu","actor","800123");

VALUES ("kim","student","100101");

VALUES ("lee","teacher","1930-01-02");

 

4. 게시글 테이블 생성

CREATE TABLE posts (

  id INT NOT NULL AUTO_INCREMENT,

  title VARCHAR(100) NOT NULL,

  content VARCHAR(2000),

  created_at TIMESTAMP DEFAULT NOW(),

  PRIMARY KEY (id)

);

 

5. 게시글 데이터 삽입

INSERT INTO posts (title, content)

VALUES ("title","content");

 

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

ALTER TABLE posts

ADD COLUMN updated_at DATETIME

DEFAULT NOW()

ON UPDATE NOW();

  • updated_data 추가됨
  • null : yes
  • extra : on update current_timestamp()

열이 생성된 시간으로 update 값 들어감

 

- INSERT INTO posts (title,content) VALUES ("ttitle2", "content2");

  • 새로 데이터를 생성할 경우 create 시간과 update 시간이 같음

 

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

UPDATE posts

SET title  = "title2"

WHERE id =2;

 

 

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

  - 우선 posts에 사용자 아디디 컬럼 추가

ALTER TABLE posts

ADD COLUMN user_id INT;

 

ALTER TABLE posts

ADD FOREIGN KEY(user_id)

REFERENCES users(id);

여젼히 null
user_id 의 MUL(multiple)

  • MUL : 여러개의 같은 값을 가질 수 있음(중복)
    • 게시글은 한 사람이 여러게 작성할 수 있어, 게시글 입장에서는 멀티플임!

 

 -   INSERT INTO posts (title,content, user_id) VALUES ("title4, "content4", 3);

  • users 테이블에 존재하는 아이디를 posts의 user_id로 넣어 줌

9. JOIN 

셀렉트한 테이블을 왼쪽에 붙여 join해줌 / on으로 조건

SELECT * FROM posts LEFT

JOIN users ON posts.user_id  = users.id;

  • 아이디에 연결된 테이블 보여줌!

 - user_id와 id가 겹침 / 또한 보여주는 테이블에 사용자 번호는 딱히 필요가 없음

SELECT posts.id, title, content, created_at, updated_at, name, job, birth FROM posts LEFT

JOIN users ON posts.user_id = users.id;

  • 필요한 데이터만 보여줌 확인

 


auto_increment_lock_mode

실패를 해도 increment 값이 하나씩 올라가는 디폴트

 

 

 

 

 

 


MySQL (mariaDB) 날짜 / 시간 타입

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시간제)
  • Default = current_timestamp()
  • 시스템 시간대 정보에 맞게 일시를 저장한다.

cf. UTC :  한국시간 - 9 

 

  • Not Null vs Default
    • Not Null : 직접 null 이라고 작성하는 것도 안됨!
    • Default : 값이 안들어올 때, 기본 값으로 셋팅
      • 공란으로 insert => Default 설정해둔 값이 insert
      • 직접 null 작성해 insert => null 셋팅