이 글은
MySQL
을 Node 서버와 연결시키기 전 기본 세팅부터 Database, Table 생성, 그리고 기본적인 CRUD 동작에 대한 정리글입니다. Mac 환경을 기준으로 정리합니다.
1. Setting
1. Homebrew 설치
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
💡 설치 후
zsh
에서brew
를 찾지 못하는 이슈 발생$ zsh: command not found:brew
✅ 해결
mac의
[USER_ID]
명을 변경하여 해결$ echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/<USER_ID>/.zprofile eval "$(/opt/homebrew/bin/brew shellenv)"
2. brew를 활용한 MySQL 설치
$ brew install mysql
$ brew services start mysql
$ mysql_secure_installation // 비밀번호 설정
3. MySQL 접속
$ mysql -h localhost -u root -p
4. DataBase 생성
node라는 이름의 DataBase 생성
$ CREATE DATABASE node CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
→ CREATE DATABASE [데이터베이스명]
뒤에 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
를 작성함으로써, 데이터 정보에 한글과 이모지를 사용할 수 있도록 한다.
5. Table 생성
users Table 생성
$ CREATE TABLE node.users(
-> id INT NOT NULL AUTO_INCREMENT,
-> name VARCHAR(20) NOT NULL,
-> age INT UNSIGNED NOT NULL,
-> married TINYINT NOT NULL,
-> comment TEXT NULL,
-> createdAt DATETIME NOT NULL DEFAULT now(),
-> PRIMARY KEY(id),
-> UNIQUE INDEX name_UNIQUE(name ASC)) // 내림차순은 DESC
-> COMMENT='사용자 정보' // 테이블에 대한 보충 설명
-> ENGINE=InnoDB; // MyISAM or InnoDB
comments Table 생성
$ CREATE TABLE node.comments(
-> id INT NOT NULL AUTO_INCREMENT,
-> commenter INT NOT NULL,
-> comment VARCHAR(100) NOT NULL,
-> createdAt DATETIME NOT NULL DEFAULT now(),
-> PRIMARY KEY(id),
-> INDEX commenter_idx (commenter ASC),
-> CONSTRAINT commenter
-> FOREIGN KEY (commenter)
-> REFERENCES nodejs.users (id)
-> ON DELETE CASCADE
-> ON UPDATE CASCADE)
-> COMMENT = '댓글'
-> ENGINE=InnoDB;
Data Type
INT
- 정수VARCHAR(자릿수) or CHAR(자릿수)
CHAR
- 고정 길이- CHAR(10) → 반드시 길이 10인 문자열
- 주어진 길이보다 짧은 문자열을 넣는 경우, 빈 자리에 스페이스가 채워진다.
VARCHAR
- 가변 길이- VARCHAR(10) → 길이가 0 ~ 10 인 문자열
TEXT
- 긴 글TINYINT
- -128 부터 127까지의 정수 사용- 1 또는 0만 저장한다면
Boolean
과 같은 역할 가능
- 1 또는 0만 저장한다면
DATETIME
- 날짜 / 시간DATE
- 날짜TIME
- 시간
Option
-
(option)
NOT NULL
-
(option)
NULL
-
(option)
UNSIGNED
→ 숫자 자료형에 적용되는 옵션- 기본적으로 숫자 자료형은 음수 범위를 지원한다 (-2147483648 ~ 214748364)
UNSIGNED
가 적용되어 있다면 음수는 무시되고 0 ~ 4294967295까지 저장가능- 단,
FLOAT
,DOUBLE에는
UNSIGNED
적용 불가능
-
(option)
AUTO_INCREMENT
-
(option)
DEFAULT
-
(option)
ZEROFILL
- 숫자의 자릿 수가 고정되어 있을 때 사용할 수 있음- INT(4) 인 경우, 숫자 1을 넣었다면 0001 으로 바뀜
6. DataBase & Table Utils
DataBase 보여주기
$ SHOW DATABASES;
DataBase 선택
$ USE node;
DataBase 삭제
$ DROP DATABASE node;
특정 Table 구조 확인
$ DESC users;
Table 목록 확인
$ SHOW TABLES;
잘못 만든 Table 제거
$ DROP TABLE users;
DataBase 종료
$ exit
// Bye ...
$ mysql.server.stop
// Shutting down MySQL .SUCCESS!
2. CRUD
1. Create
USE node // DataBase 선택
$ INSERT INTO users (name, age, married, comment)
-> VALUES('zero', 24, 0, '자기소개1');
$ INSERT INTO users (name, age, married, comment)
-> VALUES('nero', 32, 1, '자기소개1');
$ INSERT INTO comments (commenter, comment)
-> VALUES (1, '안녕하세요. zero의 댓글입니다');
→ 0 또는 1로 boolean 표시 가능
2. Read
전체 데이터 조회
$ SELECT * FROM users
$ SELECT * FROM comments
특정 Column 조회
$ SELECT name, married FROM node.users;
$ SELECT name, age FROM node.users WHERE married = 1 AND age > 30;
$ SELECT name, age FROM node.users WHERE married = 0 OR age > 30;
$ SELECT id, name FROM node.users ORDER BY age DESC; // 내림차순 조회
$ SELECT id, name FROM node.users ORDER BY age DESC LIMIT 1; // 하나만 조회
// 페이지네이션 기능 구현 시 유용
$ SELECT id, name FROM node.users ORDER BY age DESC LIMIT 1 OFFSET 1; // 건너뛸 숫자
3. Update
$ UPDATE node.users SET comment='바꿀내용' WHERE id = 2;
4. Delete
DELETE FROM node.users WHERE id = 2;