본문 바로가기

공부/타입스크립트로 함께하는 웹 풀 사이클 개발(React, Node.js)

백엔드 심화: 인증과 비동기처리(2)-db create table{}, LEFT JOIN __ ON __

❄️DB테이블 생성 실습

예시) 게시판

  1. 'board' 스키마 생성 create
  2. 사용자 테이블 생성 insert
  3. 사용자 데이터 삽입 create
  4. 게시글 테이블 생성 insert
  5. 게시글 데이터 삽입 create

 

💢FK는 설정했지만 먹지않는다. 아직 강의를 좀 더 봐야겠다.

create database board;

사용자 테이블
create table users_info (
	user_id int auto_increment primary key,
	user_name varchar(30) not null,
	user_job varchar(100),
	user_birth date not null
);

게시글 테이블
create table users_board (
	idx int auto_increment primary key,
	title varchar(200) not null,
	content text not null,
	create_at timestamp default current_timestamp,
	updatede_at timestamp default current_timestamp on update current_timestamp,	
	foreign key(user_id) references users_info(user_id)
);

 

users_info 테이블 생성 후 확인

데이터 insert 후 확인

 

users_board 테이블 생성 후 확인

데이터 insert 후 확인

 

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시간제)

시스템 시간대 정보에 맞게 일시를 저장한다.

cf. UTC : 한국시간 -9

 

Not Null vs Default

Not Null

🔸직접 null을 넣는것 안된다.

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

🔸공란으로 insert => Default 설정 해준 기본 값이 insert 된다.

🔸직접 null이라고 작성하면 null setting이 된다.

 

❄️게시글 테이블에 수정일자 추가하기

ALTER TABLE 테이블명
ADD COLUMN updated_at datetime default now() on update now();

 

컬럼추가와 데이터 insert 후 확인해보면 컬럼 생성 전에 만든 데이터에

컬럼 생성 시간에 따라 일괄적으로 같은 시간이 입력되었고,

추가적으로 insert한 데이터에는 생성시간과 업데이트 시간이 같이 들어간 것을 확인할 수 있다.

궁금해서 create_at에 0을 넣었더니 0000-00-00 00:00:00으로 삽입되었다.😅

 

여기서 content2에 대한 데이터를 update 해줬을때 업데이트 시간이 갱신된 것을 알 수 있다❗

 

FK를 할때 아까 user_id가 없다고 말한것은 user_id 컬럼을 추가하고 FK를 따로 설정해줘야 해서 그런것 같다

✨컬럼 추가 후 FK설정해주기.

 

FK설정 후 확인해보면 key에 MUL이라는 값이 들어간 것을 확인할 수 있다.

MUL은 multiple의 약자고, 여러 행이 같은 값을 가질 수 있다는 뜻이다

 

not null 처리를 해주었더니 default가 0으로 들어온다.

 

✨JOIN 조인

SELECT * FROM users_posts
LEFT JOIN users_info ON users_posts.user_id = users_info.user_id;

 

join을 사용하여 가상으로 보여주는 테이블

내가 보여주길 원하는 컬럼명만 가지고와서 볼 수 있다❗

💢중간에 users_info에 없는 user_id로 users_posts의 user_id로 사용했을때 테이블에 없는 PK값으로 실패했는데,
그때 id 5가 그냥 건너뛰었다.
auto_increment_lock_mode // innodb_autoinc_lock_mode = 0
으로 설정하면 실패해도 숫자 건너뛰기가 안된다고 한다❗