SQL의 기초 모든 것

데브코스

목록 보기
46/131

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");

조회하기 명령어

  • SELECT * FROM users;

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

  • 날짜만
  • 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시간제)

시스템 시간대 정보에 맞게 일시를 저장한다. 근데 막상 찍어보면 날짜는 같아도 시간이 다른데, 그건 UTC로 찍어주기 때문임.


여서 DEFAULT는 뭐냐, 아무 값도 안들어오면 내가 알아서 넣어줄게, 라는 뜻이야.

NOT NULL :

  • 내가 직접 NULL이라고 작성해서 넣는 것도 안돼요!

DEFAULT :

  • 값이 안들어올때, 기본 값으로 셋팅
  • 공란으로 insert => Default 설정 해둔 기본 값이 insert
  • 내가 직접 null이라고 작성해서 넣으면, null setting
profile
Dive Head First | Work Super Hard | Attract Great People

0개의 댓글