본문 바로가기

프로그래머스 풀스택 데브코스/데브코스 TIL

웹 풀사이클 데브코스 TIL 23일차

데이터 베이스 생성

테이블 이름은 기본적으로 복수형으로 작성권장

"Board" 스키마 생성

CREATE DATABASE Board;  
USE Board;

사용자 테이블 생성

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

NOT NULL 은 값이 필수로 있어야 한다는 뜻.
AUTO_INCREMENT 는 pk 등에 사용하는데 아이디를 자동으로 생성해준다. 마지막으로 primary key 는 id를 사용한다고 지정해준다.

SHOW tables;

를 하면 생성된 테이블들이 출력되고

DESC users;

를 하면 그 테이블의 정보를 출력해준다.(Describe)

사용자 데이터 삽입

INSERT INTO users(name, job, birth)
VALUES ("gongu", "actor", "800123");

이때 생년월일을 6자리로 입력하면 실제 데이터베이스에는 1980-01-23으로 알아서 맞춰서 들어간다. 하지만 이는 불명확한 표현법이므로 제대로 값을 입력하는것이 권장된다.

INSERT INTO users(name, job, birth)
VALUES ("gongu", "actor", "1980-01-23");

게시글 테이블 생성

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)
);

날짜 컬럼의 이름은 일반적으로 created_at, updated_at 과 같이 사용한다. 날짜를 자동으로 넣어줬으면 좋겠다는 생각이 든다면 Timestamp 기능을 사용한다.

게시글 데이터 삽입

INSERT INTO posts (title, content)
VALUES ("title1", "content1");

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

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

수정 일자는 ON UPDATE NOW()를 추가로 입력해준다.

게시글 테이블 값 수정

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

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

ALTER TABLE posts
ADD COLUMN user_id INT;
ALTER TABLE posts
ADD FOREIGN KEY(user_id)
REFERENCES users(id);

DESC로 확인해보면 중간에 MUL 이라는 값이 보인다. MUL은 여러행이 같은 값을 가질 수 있다는 뜻.

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시간제), UTC 시간으로 자동입력

Default

아무값도 안들어오면 그때 넣어줄 값.

Not Null vs Default

Not null은 직접 null 이라고 작성해서 넣는것도 안됨.
Default는 값이 안들어올 때, 기본값으로 셋팅

  • 공란으로 insert -> Default 로
  • 직접 null 작성하면, null 세팅해줌

JOIN

SELECT 할때 테이블을 붙여서 보여준다.

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

LEFT JOIN: select 할 테이블을 왼쪽에 붙이고 조인을 시작한다.

SELECT posts.id, title, content, created_at, updated_at,
name, job, birth FROM posts
LEFT JOIN users ON posts.user_id = users.id;

원하는 컬럼만 선택해서 보여줄 수도 있다. 이때 id 는 users에도 있고 posts에도 있기때문에 어떤 테이블의 id인지 제대로 명시해 주어야한다.

auto_increment_lock_mode 설정

기본 설정은 insert가 실패해도 값이 올라간다. 관심있으면 참고

후기

데이터베이스의 많은것들을 실습한 시간이었다. 테이블 생성, 삽입, 조회부터 조인까지 여러가지를 배울 수 있었다.

키워드: 프로그래머스 데브코스, 국비지원교육, 코딩부트캠프