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,
PRIMARY KEY (id)
);
3. 사용자 데이터 삽입
INSERT INTO users(name, job, birth)
VALUES("장재현", "director", "810101");
INSERT INTO users(name, job, birth)
VALUES ("chae", "std", "2000-01-26");
날짜 형식이 달라도, 동일하게 DB에 들어오는걸 볼 수 있다.
insert 할때 id 값은 자동으로 할당된다.
❓ not null인 이름에 null 값이 들어간다면?
값을 입력하지 않아도, null이라고 명시해도 에러가 발생한다.
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)
);
❓timestamp type일 경운 null 상태가 yes인지, no 인지
5. 게시글 데이터 삽입
INSERT INTO posts (title, constent)
VALUES("title1", "content1");
날짜 명시하지 않아도 자동으로 삽입!
제목만 입력하면 ID, TIMESTAMP는 자동으로 할당함
MySQL (mariadb) 날짜 / 시간 타입
- DATE
- 날짜만
- YYYY-MM-DD
- DATETIME
- 날짜 + 시간
- YYYY-MM-DD HH:MM:SS (24시간제)
- TIME
- 시간
- HH:MM:SS
- TIMESTAMP
- 시스템 시간대 정보에 맞게 일시를 저장한다.
- 날짜 + 시간
- YYYY-MM-DD HH:MM:SS (24시간제)
❓ DATETIME VS TIMESTAMP
`current_timestamp()` 가 기본 제공 > UTC : 한국시간 -9 기준
NOT NULL VS DEFAULT
Not Null : 직접 null이라고 명시하는것도 안됨
Default : 값이 안들어올때 기본값으로 세팅
- 공란으로 Insert ? Default 설정해둔 기본값이 Insert
- Default를 null로 작성해서 설정하면, 공란으로 했을때 null 이 세팅될 수 있다.
게시글 테이블에 수정일자 추가 update_at
ALTER TABLE posts
ADD COLUMN updated_at DATETIME
DEFAULT NOW()
ON UPDATE NOW();
게시글 테이블 id2 수정
UPDATE posts
SET content = "updated!"
WHERE id = 2;
updated_at이 수정일시로 바뀌는 것을 볼 수 있다.
작성자 컬림 FK 추가
user_id 컬럼 추가하면서, 외래키로 바로 설정하는 sql 문
ALTER TABLE posts
ADD COLUMN user_id INT,
ADD FOREIGN KEY (user_id)
REFERENCES users(id);
MUL multiful? 외래키 이지만, 여러행을 가질 수 있다. - 사용자키 중복으로 가질 수 있기 때문에
user_id not null 설정
join
select 할때 가상의 테이블을 만들어서 다른 테이블의 외래키로 연결된 데이터까지 연결해서 보여준다.
SELECT posts.id, title, content, created_at, updated_at, user_id, name, job, birth
FROM posts
LEFT JOIN users
ON posts.user_id = users.id;
INSERT 한번 실패했는데, id가 자동으로 넘어가있음. mode 설정이 있다고 한다. `auto_increment_lock_mode`
☑️ 배운 점
CLI 진짜 싫다......ㅋ.....
TIMESTAMP와 DATETIME 의 차이점을 알게되어서 좋았고, update 될 때 수정! `ON UPDATE NOW()`로 할 수 있다.
이외에도 INSERT 문 실패했을때 자동 증가 모드에 대해서도 알게 되었다.