DB 설계와 조인 연산

Younha Lee·2026년 1월 30일

TIL

목록 보기
23/61

개요

오늘은 실제로 sql을 통해 테이블을 만들고 pk와 fk로 연결해보기로 했어요
도커 컴포즈로 mariaDB로 띄워봤어요.

posts 테이블도 만들고

유저 테이블도 다음과 같이 만들었어요.

DESC 테이블명 을 통해 테이블 칼럼 정보를 조회 가능해요

제약조건

만약 NOT NULL 로 설정해놓은 칼럼에 null값을 넣으면 어떻게 될까요?


결과로 default 값을 설정하지 않았는데 null 값을 넣어서 실행도 전에 오류가 났어요

아예 null을 넣으니 nullable 하지 않다는 오류가 났어요.

MySQL 날짜 / 시간 타입

  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시간제)
    created_at 에서 매우 자주 사용한다.
    기본값으로 current_timestamp를 넣어준다. 자동 입력을 지원함.

Not Null vs Default

Not Null - 직접 null로 작성하는 것도 안됨
Default - 공란으로 삽입되면 기본값이 설정됨.

Updated at


updated_at은 ON UPDATE 절에 내용을 추가하면 돼요.

이렇게 extra에 업데이트 시간을 체크하도록 되어있어요.

FK

FK는 다른 테이블의 어떤 id를 지정할 것인지 해줘야해요.

CREATE TABLE posts (
    id int PRIMARY KEY  AUTO_INCREMENT,
    title varchar(255) NOT NULL,
    content text NOT NULL,
    created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at datetime default NOW() on update NOW(),
    user_id int references users(id)
);

저는 users 테이블의 pk인 id를 FK로 지정했어요.

JOIN


RDBMS의 가장 중요한 JOIN이에요.
저희는 posts의 id를 기준으로 하기위해 LEFT JOIN으로 지정했어요.
필요없게 userId가 두 개나 생성되기 때문에, select할 때 필요한 칼럼만 고를 필요가 있어요.

profile
할 땐 하고 놀 땐 노는 일일놀놀입니다.

0개의 댓글