프로그래머스 풀스택 21
posted on 12 Sep 2024 under category programmers in series programmers
백엔드 심화: 인증과 비동기처리(2)
💫 SQL은 외우는 게 아님!
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)
);
INSERT INTO users (name, job, birth)
VALUES ("haerin", "idol","20060515");
INSERT INTO users (name, job, birth)
VALUES ("haerin", "student","2006-07-15");
INSERT INTO users (name, job, birth)
VALUES ("danielle", "idol","2005-04-11");
INSERT INTO users (name, job, birth)
VALUES ("minji", "idol","2004-05-07");
INSERT INTO users (name, job, birth)
VALUES ("hanni", "idol","2004-10-06");
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)
);
INSERT INTO posts (title, content)
VALUES ("title1", "content1");
ALTER TABLE posts
ADD COLUMN updated_at DATETIME
DEFAULT NOW()
ON UPDATE NOW();
UPDATE posts
SET content="updated!"
WHERE id = 2;
ALTER TABLE posts
ADD COLUMN user_id INT;
ALTER TABLE posts
ADD FOREIGN KEY(user_id)
REFERENCES users(id);
SELECT * FROM posts LEFT
JOIN users ON posts.user_id = users.id;
SELECT posts.id, title, content, created_at, updated_at, name, job, birth FROM posts LEFT
JOIN users ON posts.user_id = users.id;
mariaDB insert 예시
들어가면 예시를 볼 수 있음!
💫 timestamp
💫 날짜-시간 타입
cf. UTC : 한국 시간 -9
💫 Not Null VS Default
Not Null
Default
💫 alter updated_at
🌊DB 테이블 생성 실습 6~8번 실습 참고
💫 user_id
나같은 경우 users에 이미 5개가 들어가 있어서 오류가 안났지만
5개가 들어가 있는데 6이상을 적으면 오류가 남!
INSERT INTO posts (title, content, user_id)
VALUES ("title4", "content4", 5);
💫 FK 실습
🌊DB 테이블 생성 실습 9번 실습 참고
JOIN의 종류
SELECT users.name, orders.order_date
FROM users
INNER JOIN orders ON users.id = orders.user_id;
SELECT users.name, orders.order_date
FROM users
LEFT JOIN orders ON users.id = orders.user_id;
SELECT users.name, orders.order_date
FROM users
RIGHT JOIN orders ON users.id = orders.user_id;
SELECT users.name, orders.order_date
FROM users
FULL OUTER JOIN orders ON users.id = orders.user_id;
SELECT users.name, orders.order_date
FROM users
CROSS JOIN orders;
💫 auto_increment_lock_mode 값
결론은 0은 인덱스의 순서를 보장해주지만 각 구문마다 검사를 진행하기 때문에 성능이 떨어지고 2는 성능이 보장되지만 인덱스의 순서를 보장함
💫 수정 방법
SQL SET global innodb_autoinc_lock_mode = 0;
Y 일을 통해 명확히 알게 되었거나 이해한 부분(한 일)에 대해 정리 :
timestamp / Not Null VS Default / JOIN(정규화) / auto_increment_lock_mode
W 배운 점과 시사점 :
DB 테이블 생성, 삽입, 수정 실습을 진행했고 auto_increment을 쓸 때 잠그지 않으면, 오류가 나도 값이 증가한다는 걸 배웠음!
JOIN(정규화)을 통해 여러 테이블에 분산된 데이터를 결합하여 필요한 정보를 추출할 수 있음!
T 응용하여 배운 것을 어디에 어떻게 적용할지:
CLI를 통해 DB 테이블 생성, 삽입, 수정을 잘할 수 있을 것이고 JOIN(정규화)을 통해 필요한 값을 잘 분류할 수 있을 것이다!