1️⃣ mariaDB 설치하기
2️⃣ 이번엔 GUI로 설치해보자
1️⃣ 분리한 엑셀을 DB테이블로 생성해보자

2️⃣ SQL 데이터 구현 순서 정리
"board" 스키마 생성
사용자 테이블 생성
게시글 테이블 생성
사용자 데이터 삽입
게시글 데이터 삽입
3️⃣ 테이블을 생성해보자
CREATE DATABASE Board;
USE Board;
CREATE TABLE users // 객체 지향에서 테이블 네임은 복수형이 좋음
(
id INT NOT NULL AUTO_INCREMENT, // 비어있는 값이 안되므로 NOT NULL을 붙여줌, AUTO_INCREMENT로 자동으로 증가되도록 설정
name VARCHAR(30) NOT NULL,
job VARCHAR(100),
birth DATE, // 생일이기 때문에 DATA로 설정
PRIMARY KEY (id) // 테이블을 만들 때 사용하는 id는 프라이머리 키로 사용한다고 선언
);
SHOW TABLES;
DESC users; // 테이블을 상세 조회해보면 정상적으로 표출됨

CREATE TABLE posts
(
id INT NOT NULL AUTO_INCREMENT,
title VARCHAR (30) NOT NULL,
content VARCHAR(2000),
created_at TIMESTAMP DEFAULT NOW(), // 생성 날자 자동기록 되도록 TIMESTAMP를 지금 사용으로 설정
PRIMARY KEY (id) // 테이블을 만들 때 사용하는 id는 프라이머리 키로 사용한다고 선언
);

1️⃣ users 테이블에 데이터를 삽입(insert)
INSERT INTO users(name, job, birth) // id는 넣지 않아도 자동으로 들어가게 됨
VALUES("gongu", "actor", "800123") // 생년월일은 자동으로 그럴듯하게 맞춰짐, 그래도 2002-01-01로 정확하게 넣어주는 것이 좋음
SELECT * FROM users; 로 테이블의 전체 값을 조회하니 잘 출력됨


2️⃣ NOT NULL 잘 작동함

1️⃣ posts 테이블에 데이터를 삽입(insert)
INSERT INTO posts(title, content) // created_at은 자동으로 삽입되므로 안 써도 됨
VALUES("title1", "content1");
2️⃣ MySQL(mariadb) 날짜 / 시간 타입의 종류
DATE
날짜만 포함하는 경우에 사용 / YYYY-MM-DD
DATETIME
날짜와 시간을 포함 / YYYY-MM-DD HH:MM:SS(24시간제)
TIME
시간만 포함 / HH:MM:SS
TIMESTAMP 👉 자동입력(current_timestamp)
날짜와 시간을 포함 / YYYY-MM-DD HH:MM:SS(24시간제) /
시스템 시간대 정보(UTC)에 맞게 일시를 저장함
3️⃣ Not NULL 과 Default의 차이

1️⃣ 게시글 테이블에 수정일자를 넣어보자
ALTER TABLE posts
ADD COLUMN updated_at DATETIME
DEFAULT NOW()
ON UPDATE NOW(); // 업데이트 될 때 시간이 찍혀야 하므로 이렇게 작어줌

2️⃣ 수정일자(업데이트)가 잘 작동하는지 확인
UPDATE posts
SET content = "updated" // 글 본문 내용을 수정해줌
WHERE id 2;

3️⃣ 게시글에 user_id를 추가하자
ALTER TABLE posts
ADD COLUMN user_id INT;

ALTER TABLE posts
ADD FOREIGN KEY(user_id) // FK 추가
REFERENCES users(id); // 참조해서 가져오는 곳

엥 NULL로 뜨네? 테이블 속성을 확인해보니 키 값이 들어갔고 MUL(멀티플)이라고 뜬다

잘 작동하는지 확인해보기 위해 유저5를 집어넣으니 참조할 것이 없다고 뜬다
INSERT INTO posts(title, content, user_id)
VALUES("title3", "content3", 5);

INSERT INTO posts(title, content, user_id)
VALUES("title3", "content3", 1);

1️⃣ JOIN이란?
SELECT*FROM posts
LEFT JOIN users ON posts.user_id = users.id; // posts 왼쪽에 붙여줌, 게시글 테이블의 유저id와 유저 테이블의 유저id가 같다면 이라는 조건을 달자

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

👉 INSERT 실패 했었던 id 3이 있었는데 3을 생략하고 increment 값이 올라감
이것은 auto_increment_lock_mode 설정이 되어 있기 때문임, 실패해도 올라가게 설정이 되어있는 것