티스토리 뷰
백엔드 심화(1)
데이터베이스란?
: 데이터를 통합하여 효율적으로 관리하기 위한 데이터 집합체를 데이터베이스라고 합니다.
데이터 베이스의 장점 : 데이터를 구조화하여 관리함으로써 데이터 중복을 막고, 효율적으로 빠른 데이터 연산을 가능하게함.
DBMS
: 우리는 데이터베이스를 운영하고 관리하기 위한 DBMS를 통해 데이터베이스를 사용합니다.
DBMS의 종류
: RDBMS형태인지, 문서 저장소 형태인지 등등 종류가 여러가지
: 운영회사는 다르지만, 데이터베이스에 연산을 요청하기 위해 사용 되는 주요 명령어는 동일합니다.
SQL
:SQL은 데이터베이스에 연산을 요청하기 위해 사용 되는 언어로 데이터를 생성, 조회, 수정, 삭제 등과 같은 기능을 수행할 수 있습니다
- 데이터 삽입 : INSERT
- 데이터 조회 : SELECT
- 데이터 수정 : UPDATE
- 데이터 삭제 : DELETE
RDBMS를 쓰는 이유
: RDBMS(:데이터 간 관계)란 관계형 데이터베이스이다.
-데이터를 표(테이블) 형태로 저장하고 관리하는 데이터베이스 시스템
쓰는 이유는 마인드맵 같이
- 데이터 정리하기 좋음
- 데이터를 표(테이블) 형태로 정리해서 보기 쉽고, 필요한 정보를 빠르게 찾을 수 있음.
- 데이터 꼬이지 않게 관리 가능
- 여러 사람이 동시에 데이터를 수정해도 충돌이 안 나게 조절해 줌.
- 실수로 잘못 입력하거나 삭제해도 복구할 수 있음.
- 데이터 관계를 쉽게 연결할 수 있음
- 예를 들어, 학생 정보와 성적 정보를 각각 저장하고 서로 연결해서 사용할 수 있음.
- 빠르게 찾고 수정할 수 있음
- SQL이라는 언어를 써서 원하는 데이터를 쉽게 검색하거나 수정할 수 있음.
- 보안이 좋음
- 권한을 설정해서 특정 사람만 데이터를 볼 수 있게 할 수 있음.
- 백업과 복구가 가능함
- 데이터가 날아가도 복구할 수 있어서 안전함.

- primary key : pk(기본키) : 해당 테이블의 각 row(행)을 유니크(=유일)하게 구별할 수 있는 key값
>>작성자가 동명이인인지 아닌지 아직 구별을 못함
cf.정규화 = 테이블을 쪼갠다
테이터 중복시 테이블 분리(정규화)

-Foreign key : FK(외래키) : A테이블에서 B테이블의 데이터를 찾아가고 싶을 때, 사용하는 key값
(최대한 B테이블의 PK값을 A테이블의 FK로 쓰는 것이 이상적)
정규화의
장점 : 중복이 최소로 사라졌다.
단점 : 한눈에 모든 정보가 보이지않는다.
- 데이터베이스 연관관계는 1:1, 1:N, M:N이 있다.
게시글 VS 사용자
1) 사용자 1명 당 -> 게시글 여러 개 쓸 수 있음 1:N
2) 게시글 1개 당 -> 사용자 1명 1:1
게시글 - 사용자 테이블 분리
- 게시글 테이블을 보고 사용자 데이터를 확인 : 연관관계
>> 게시글 테이블을 보고 사용자랑 어떤 관계인지 확인
//- 사용자 테이블을 보고 게시글 데이터를 확인 X
# 현업에 계신 분들? 설계를 잘하냐 : DBA
+ 구현을 들어가보면, SQL 꼬일 때, SQL이 길 때
>> 설계를 뜯어 고치면 된다!
유튜브 실습 DB로 바꾸기
(백엔드 기초에서 유튜브 실습 하고 다시 듣기)
mysql workbench 소개 및 설치
백엔드 심화(2)
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)
);

** DESC는 DESCRIBE의 약어로, 테이블의 구조를 확인
3. 사용자 데이터 삽입
INSERT INTO users (name, job, birth)
VALUES("gongu", "actor", "800123");


800102를 넣으면 자동으로 1980년이 되지만 그렇게 하지 않기 위해서는 정확히 써주어야한다.
4. 게시글 테이블 생성
CREATE TABLE posts
(
id INT NOT NULL AUTO_INCREMENT,
title VARCHAR(100) NOT NULL,
content VARCHAR(2000),
create_at TIMESTAMP DEFAULT NOW(),
PRIMARY KEY (id)
);

?? : ALTER TABLE posts MODIFY create_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;을 추가
TIMESTAMP 컬럼에 기본값을 설정했지만 NULL 값이 허용되는 이유는 MariaDB의 버전이나 설정 차이에 따른 동작일 수 있습니다. NOT NULL을 명시적으로 추가하는 것이 가장 확실한 방법입니다.
** TIMESTAMP DEFAULT NOW(), >>현재 시각
5. 게시글 데이터 삽입
INSERT INTO posts(title, content)
VALUES("title", "content");

6. 게시글 테이블에 수정일자 추가
ALTER TABLE posts
ADD COLUMN updated_at DATETIME
DEFAULT NOW()
ON UPDATE NOW();



7. 게시글 테이블 id2 수정
UPDATE posts
SET content = "updated!"
WHERE id = 2;

8. 게시글 테이블에 작성자 컬럼 FK 추가
ALTER TABLE posts
ADD FOREIGN KEY(user_id)
REFERENCES users(id);
--- 여기 까지 하면 user_id가 없다는 오류가 뜬다.
--- 그래서 먼저 user_id를 추가를 해줘야함
ALTER TABLE posts
ADD COLUMN user_id INT; <<6번에서 설명

9. JOIN
- 게시글을 분리함으로써 한번에 보이지 않는 불편함이 있었다.
- 게시글을 기준으로 사용자를 붙여서 출력
SELECT * FROM posts LEFT <<왼쪽에 붙여서 출력해줘 일반적인 join방법
JOIN users ON posts.user_id = users.id; << ON posts.user_id = users.id 을 기준으로 잡음

SELECT posts.id, title, content, create_at, updated_at,
name, job, birth FROM posts LEFT
JOIN users ON posts.user_id = users.id;
MySQL날짜/시간 타입
1. DATE
-날짜만
-YYYY-MM-DD
-1000-01-01~9999-12-31
2. DATETIME
-날짜+시간
-YYYY-MM-DD HH:MM:SS(24시간제)
3. TIME
-시간
- HH:MM:SS
4. TIMESTAML : 자동입력
-날짜+시간
-YYYY-MM-DD HH:MM:SS(24시간제)
시스템 시간대 정보에 맞게 일시를 저장한다.
** DATETIME과 TIMESTAML의 차이 : TIMESTAML : 자동입력
cf, UTC : 한국시간 - 9
Not Null vs Default
Not Null
- 직접 null이라고 작성해서 넣는 것도 안됨
Default
- 값이 안 들어올 때, 기본 값으로 셋팅
-공란으로 insert -> Default설정 해둔 기본 값이 insert
- 직접 null이라고 작성해서 넣으면 null로 셋팅됨
** 공식 문서에서 예시보기


