1. "board" 스키마 생성
CREATE DATABASE board;
USE board;
2. 사용자 테이블 생성
CREATE TABLE users(
id INT NOT NULL AUTO_INCREMENT, // null 값 안됨, auto_increment 로 id 는 자동으로 올라감
name VARCHAR(30) NOT NULL,
job VARCHAR(100),
birth DATE,
PRIMARY KEY(id)
);
3. 사용자 데이터 삽입
INSERT INTO users(name,job,birth)
VALUES ("gongu","actor","800123");
➡️"800123" 으로 입력했지만, 테이블에는 자동으로 1980-01-23 으로 저장되는 것을 볼 수 있다. 원하지 않는 형식으로 데이터가 들어가는 것을 방지하기 위해서는 날짜 형식을 "1930-01-02" 와 같이 넣는 것이 좋다. (300102 와 같은 형식으로 입력할 경우, 2030-01-02 와 같이 저장될 수 있음)
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)
);
5. 게시글 데이터 삽입
INSERT INTO posts(title,content)
VALUES ("title1","content1");
➡️ created_at을 입력하지 않았는데, TIMESTMAP 로 형식이 지정되어 있어 자동으로 값이 들어가 있는 것을 확인할 수 있다.
6. 게시글 테이블에 수정일자 추가
ALTER TABLE posts
ADD COLUMN updated_at DATETIME
DEFAULT NOW()
ON UPDATE NOW();
7. 게시글 테이블 id 2 수정
UPDATE posts
SET content="updated!"
WHERE id=2;
8. 게시글 테이블에 작성자 컬럼 FK 추가
ALTER TABLE posts
ADD COLUMN user_id INT;
ALTER TABLE posts
ADD FOREIGN KEY(id)
REFERENCES users(id);
➡️ MUL 은 MULTIPLE 이라는 뜻, 게시글 테이블에는 사용자 번호가 중복될 수 있기 때문이다.
⭐ 9. 조인
SELECT * FROM posts
LEFT JOIN users ON posts.user_id = users.id;
MySQL (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시간제)
: 시스템 시간대 정보에 맞게 일시를 저장한다.
cf. UTC : 한국 시간 -9
Not Null vs Default
Not Null
: 직접 null 이라고 작성해서 넣는 것도 안됨
Default
: 값이 안들어올 때, 기본 값으로 셋팅
: 직접 null 이라고 작성해서 넣으면, null 이 셋팅
🌟 배운 점
오늘은 데이터베이스 테이블 생성 실습을 했다. 아직은 SQL 문이 익숙하지 않아서 삽입하고, 수정할 때 헷갈리는 경우가 많다. 오늘 강의를 통해서 테이블을 설계할 때 사용하는 속성인 auto_increment 와 timestamp 에 대해 새롭게 배웠다. 이전에 학교에서 데이터베이스를 배웠음에도 이번에 처음 알게 된 것 같다. SQL 문에 익숙해질 수 있도록 복습을 해야겠다.
'데브코스' 카테고리의 다른 글
데이터베이스 연동하기 (0) | 2024.09.23 |
---|---|
DB 테이블 생성 실습(GUI) (0) | 2024.09.13 |
RDBMS (2) | 2024.09.11 |
Express 구조 (0) | 2024.09.10 |
채널 api 수정(+ router) (0) | 2024.09.10 |