본문 바로가기

DB

1. MySQL

 

0. DB?

 

데이터를,

서버 메모리에 저장하는 방식은 일시적 저장을 의미한다. (서버 재시작시 데이터 증발)

데이터베이스(DB)에 저장하는 방식은 영구적 저장을 의미한다. (지우지만 않는다면..)

 

1. MySQL?

https://samdasoo2l.tistory.com/11

 

0. 데이터베이스 개요

0. 더는 안된다. 파일시스템.데이터베이스의 등장 이전,데이터들을 저장하기 위해서 파일시스템을 사용했었다. 하지만 파일시스템은 여러 문제를 야기했다.통합되지 않으니까 따로따로 관리해

samdasoo2l.tistory.com

 

MySQL은 기본적으로 3306번 포트를 사용한다.

 

2. 설치

 

오라클 가입 후

MySQL 설치 (서버, 워크벤치) 후

환경변수 설정 (path) 후

설치 확인 (cmd에서 mysql --version) 하면 끝!

 

MySQL 입장은 cmd에서 mysql -h localhost -u root -p 입력 후 암호 입력

MySQL 퇴장은 mysql에서 exit 입력

 

3. 생성과 삭제

 

보통 우리가 컴퓨터에 무언가를 기록하고 싶으면,

우선 폴더를 만들고, 기록을 위한 파일을 만들 것이다.

 

마찬가지로 우리는 데이터베이스를 만들고, (like 폴더)

테이블을 만들어야 한다. (like 파일)

 

따라서

우리는 데이터베이스를 생성하는 방법과 삭제하는 방법도 알아야 하고, 

우리는 테이블을 생성하는 방법과 삭제하는 방법도 알아야 한다.

 

 

a. 데이터베이스 생성

// (한글을 기본적으로 사용하는) 데이터 베이스 ⭐ 생성
// SCHEMA 대신 DATABASE 사용 가능
CREATE SCHEMA ⭐ DEFAULT CHARACTER SET utf8;

// ⭐ 선택
use ⭐;

 

 

b. 테이블 생성

CREATE TABLE ⭐.users (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
age INT UNSIGNED NOT NULL,
married TINYINT NOT NULL,
comment TEXT NULL,
created_at DATETIME NOT NULL DEFAULT now(),
PRIMARY KEY(id),
UNIQUE INDEX name_UNIQUE (name ASC))
COMMENT = '사용자 정보'
DEFAULT CHARACTER SET = utf8
CREATE TABLE ⭐.comments (
id INT NOT NULL AUTO_INCREMENT,
commenter INT NOT NULL,
comment VARCHAR(100) NOT NULL,
created_at DATETIME NOT NULL DEFAULT now(),
PRIMARY KEY(id),
INDEX commenter_idx (commenter ASC),
CONSTRAINT commenter
FOREIGN KEY (commenter)
REFERENCES ⭐.users (id)
ON DELETE CASCADE
ON UPDATE CASCADE)
COMMENT = '댓글'
DEFAULT CHARSET=utf8mb4
ENGINE=InnoDB;

 

+

CREATE TABLE 데이터베이스명.테이블명 (~)

CONSTRAINT부터는 이어지는 내용

ON DELETE CASCADE : 사용자 테이블에서 삭제되면, 댓글 테이블에서도 삭제

외래키로 두 테이블 간에 관계 있음을 표시

 

 

c. 테이블 생성확인, 목록확인, 삭제

// 테이블 생성 확인
DESC ⭐.users;

// 테이블 목록 확인
SHOW TABLES;

// 테이블 삭제
DROP TABLE ⭐.users;

 

 

3-1. 테이블 생성에 옵션

테이블을 생성할 때,

컬럼마다 기본적으로 가져야 하는 특징이 있을 수 있다.

컬럼이 비어있으면 안되는 경우도 있을 수 있고, 숫자 혹은 날짜만 들어가야 하는 경우도 있을 수 있다.

 

그외에도 기본키, 인덱스, 테이블 옵션 등 테이블 생성 과정에서 설정해줘야 하는 것들이 있다.

 

 

아래는 컬럼 기본 옵션(기본 제약조건), 기본 키 및 유니크 제약조건 등.. 

  • INT : 정수 자료형
  • VARCHAR(10) : 최대 10글자 문자열 자료형
  • CHAR(10) : 무조건 10글자 문자열 자료형
  • TEXT : 긴 문자열 자료형
  • DATETIME : 날짜+시간 자료형
  • TINYINT : 1또는 0으로 불 값 표현 
  • /
  • NOT NULL : 빈 값 불허용
  • NULL : 빈 값 허용
  • AUTO_INCREMENT : 숫자 자료형인 경우 다음 로우가 저장될 때 자동으로 1 증가
  • DEFAULT now() : 날짜 컬럼의 기본값을 현재 시간으로 설정
  • UNSIGNED : 0과 양수만 허용 (음수X)
  • ZEROFILL : 자릿 수가 고정된 숫자 자료형의 경우, 빈자리에 0을 넣음
  • /
  • PRIMARY KEY (id) : id가 테입ㄹ에서 로우를 특정할 수 있게 해주는 "고유한 값"임을 의미
  • INDEX : 컬럼에 인덱스를 추가하여 조회 성능 향상
  • UNIQUE INDEX name_UNIQUE (name ASC) : name컬럼에 유니크한 값을 갖는 인덱스를 생성
    • UNIQUE : 해당 컬럼(name)가 고유해야 함을 나타내는 옵션
    • name_UNIQUE : 이 옵션의 이름 (아무거나 OK)
    • ASC : 인덱스를 오름차순으로 저장 (반대는 DESC)
  • FOREIGN KEY (user_id) REFERENCES users(id) : 다른 테이블의 컬럼과의 관계를 정의 (참조 무결성 유지)

아래는 테이블 옵션

  • ) ENGINE = InnoDB : 테이블이 사용하는 스토리지 엔진 지정
  • ) CHARACTER SET utf8mb4 : 테이블의 문자 집합을 지정 (mb4 쓰면 이모지 포함 가능)

 

4. 사용하기

 

생성한 데이터베이스와 테이블을 이제는 사용해 봐야 한다.

 

우리는 뭘 하고 싶을까?

세상 살이 비슷해서 하는게 거의 비슷하다.

 

테이블에

무언가를 새로 적거나,

적혀있는 무언가를 사용하려 가져오거나,

마음에 안드는 부분을 고치거나,

여차하면 지워버리거나,

 

이를 간단하게

CRUD라고 한다.

(Create, Read, Update, Delete)

 

 

a. Create

// Create

INSERT INTO ⭐.users (name, age, married, comment) VALUES ('samdasoo', 27, 0, 'hi');

INSERT INTO ⭐.comments (commenter, comment) VALUES (1, 'hi! hi!');

 

b. Read

// Read

SELECT * FROM ⭐.users;

SELECT name, married FROM ⭐.users;


// 조건 추가 - WHERE

SELECT name, age FROM ⭐.users WHERE married = 1 AND age > 30;

// age 기준으로 내림차순으로 정렬해줘, 갯수는 하나만 보여줘, 1번째까지는 스킵하고 2번째부터 보여줘

SELECT id, name FROM ⭐.users WHERE ORDER BY age DESC LIMIT 1 OFFSET 1;

 

c. Update

// Update

// users에서 id가 2인 것들의 comment는 '🍊'로 바꿔줘 

UPDATE ⭐.users SET comment = '🍊' WHERE id=2;

 

d. Delete

// Delete

DELETE FROM ⭐.users WHERE id=2;

 

 

 

SQL 모르고 난 JS만 알고 "서버" 만들러 왔는데
갑자기
SQL까지 배우라니 이게 무슨 날벼락이야?
- ZeroCho -

5. 시퀄라이즈 ORM

위와 같이 느끼는 서버 학습자를 위한 타협점으로 딱인 시퀄라이즈 ORM

 

시퀄라이즈 ORM은 SQL 없이 RDB를 쉽게 사용할 수 있도록 도와주는 라이브러리이다.

간단한 초기 규모에 적합하다. 복잡한 쿼리가 필요한 상황이 오면 결국 SQL을 사용해야 한다.

 

ORM : Object Relational Mapping, 객체와 데이터를 매핑

 

 

참고❤️

https://www.zerocho.com/book/1

'DB' 카테고리의 다른 글

2. MongoDB  (1) 2024.11.25
0. 데이터베이스 개요  (1) 2024.11.16