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)
);
//(테이블 이름은 복수형으로 하는 것이 좋음)
//ID는 널이 되면 안되기에, NOT NULL을 해줌
//primary key를 어떤 것으로 정해줄지도 여기서 정해주면 돼.
이거 치고 확인하는 법,
SHOW TABLES;
DESC users; (디스크라이브? 라던데 뭐 테이블 만든거 어케 만들어졌는지 보여주는 건가봐)
3. 사용자 데이터 생성
- INSERT INTO users (name, job, birth)
VALUES("gongu", "actor", "800123");
조회하기 명령어
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)
);
- created_at (작성일자를 쓸때 보편적으로 이걸 많이 씀)
- updated_at (수정일자를 쓸때 보편적으로 이걸 많이 씀)
5. 게시글 테이터 삽입
- INSERT INTO posts (title, content, created_at)
VALUES ("title1", "content1");
6. 게시글 테이블에 수정일자 추가
- ALTER TABLE posts
ADD COLUMN updated_at DATETIME
DEFAULT NOW() ON UPDATE NOW();
ON UPDATE NOW() 를 붙여줘야 실제 내가 update한 시간으로 update에 찍혀, 저거 안하면 created_at이랑 updated_at이 똑같아.
7. 게시글 테이블 id 2 수정
- UPDATE posts
SET content = "updated!"
WHERE id = 2;
8. 게시글 테이블에 작성자 칼럼 FK 추가
- ALTER TABLE posts
ADD FOREIGN KEY(user_id)
REFERENCES users(id);
근데 이것부터 치면 안되고,
- ALTER TABLE posts
ADD COLUMN user_id INT;
이것부터 치고 저걸 쳐야하네.
posts라는 테이블에 foreign key라는 항목을 추가해서 user_id를 받을건데, 이 user_id는 users의 id를 참조한다 라는 뜻이야.
ALTER가 추가한다.라는 거네,

MUL : 여러 행이 같은 값을 가질 수 있다. 멀티풀? 이라는 뜻이고, 중복이 가능하다라는 것.
PRI : 이건 중복 안돼, ID 고유 값만 가능혀.
9. join
- SELECT * FROM posts LEFT JOIN users ON posts.user_id = users_id;
SELECT할 테이블을 왼쪽에 붙인다 라는 뜻이야.
자 POST라는 테이블을 선택해서 보여줄건데, 왼쪽에 JOIN을 해줄거야. 어떤 JOIN?
users라는 걸 join해줄건데, 어떤 users?
post의 user_id가 users_id랑 같으면 조인을 해줄거야. 라는 뜻이야.

요렇게
조건을 달아줄땐 ON 이라는 걸 쓰나봐.

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

여 보면 id가 123하고 5로 넘어갔는데, 실패를 해도 id값이 증가해서 그래.
이게 싫으면 auto_increment_lock_mode를 해주면 돼.
MYSQL (mariadb) 날짜/ 시간 타입
1. DATE
2. DATETIME : 자동입력 안해줘.
- 날짜 + 시간
- YYYY-MM-DD HH:MM:SS(24시간제)
3. TIME
4. TIMESTAMP : 자동입력을 해줌.
- 날짜 + 시간
- YYYY-MM-DD HH:MM:SS(24시간제)
시스템 시간대 정보에 맞게 일시를 저장한다. 근데 막상 찍어보면 날짜는 같아도 시간이 다른데, 그건 UTC로 찍어주기 때문임.

여서 DEFAULT는 뭐냐, 아무 값도 안들어오면 내가 알아서 넣어줄게, 라는 뜻이야.
NOT NULL :
- 내가 직접 NULL이라고 작성해서 넣는 것도 안돼요!
DEFAULT :
- 값이 안들어올때, 기본 값으로 셋팅
- 공란으로 insert => Default 설정 해둔 기본 값이 insert
- 내가 직접 null이라고 작성해서 넣으면, null setting