2022.09.19 경일 메타버스 25주차 1일 수업내용. Node.js - MySQL
p. 278 ~ 279
관련성을 가지며 중복이 없는 데이터들의 집합
DBMS (DataBase Management System; 데이터베이스 관리 시스템)
데이터베이스를 관리하는 시스템
서버의 저장 매체에 데이터를 저장하여 서버 종료 여부와 상관없이 데이터를 지속적으로 사용 가능
여러 사람이 동시에 사용 가능
RDBMS (Relational DBMS; 관계형 DBMS)
Oracles, MySQL, MSSQL 등
SQL이라는 언어로 데이터를 관리
p. 279 ~ 286
mysql -h localhost -u root -p
명령 프롬프트를 통해 MySQL에 접속
-h
뒤에 접속 주소
-u
뒤에 사용자명
-p
: 비밀번호를 사용하겠다는 표시
p. 294 ~ 305
MySQL 기준
데이터베이스 생성 명령어
CREATE SCHEMA [데이터베이스명]
MySQL에서 데이터베이스와 스키마는 같은 개념
위 명령어와 같이 MySQL이 기본적으로 아는 구문을 예약어라 한다.
use [데이터베이스명];
으로 앞으로 지정한 데이터베이스를 사용하겠다는 것을 알린다.
SQL 구문은 세미콜론(;)을 붙여야 실행
워크벤치 사용 : p. 295 ~ 296
테이블 : 데이터가 들어갈 수 있는 틀
테이블에 맞는 데이터만 들어갈 수 있다.
세로줄 - 컬럼 (Column)
가로줄 - 로우 (Row)
한 칸 - 필드 (Field)
미리 컬럼(종류)을 정의하고, 컬럼에 맞춰 데이터를 넣는다.
테이블 생성 명령어
CREATE TABLE [데이터베이스명.테이블명](컬럼1, 컬럼2, ... )
use [데이터베이스명]
을 실행했다면 데이터베이스명.
은 생략 가능
콤마(,)로 구분해 컬럼을 만든다.
컬럼의 자료형
INT
정수
INT(자릿수)
FLOAT
, DOUBLE
CHAR(자릿수)
고정 길이 문자열
자릿수에 미달하는 문자열이면 부족한 자릿수만큼 스페이스로 채운다.
VARCHAR(자릿수)
가변 길이 문자열
보통 수백 자 이내의 문자열을 처리
TEXT
긴 글을 저장
VARCHAR
이상 길이의 문자열 (수백 자 이상) 처리
TINYINT
-128 ~ 127까지의 정수
1 또는 0만 저장한다면 불값(Boolean) 역할 가능
DATETIME
DATE
TIME
자료형 옵션
NULL
/ NOT NULL
AUTO_INCREMENT
UNSIGNED
숫자 자료형에 적용되는 옵션
음수 무시
FLOAT
/ DOUBLE
적용 불가ZEROFILL
숫자의 자릿수가 고정되어 있을 때 사용 가능
비어있는 자리를 0으로 채운다.
id INT(4) ZEROFILL
, id = 1
⇒ 0001
DEFAULT
저장 시 해당 컬럼에 값이 없을 경우 기본값
now()
/ CURRENT_TIMESTAMP
PRIMARY KEY
사용 : PRIMARY KEY()
PRIMARY KEY(id)
해당 컬럼이 기본 키
UNIQUE INDEX
사용 : UNIQUE INDEX [인덱스명] ([컬럼명] 옵션)
UNIQUE INDEX name_UNIQUE (name ASC)
해당 값이 고유함
컬럼을 인덱스로, 옵션에 따라 기억
ASC
(Ascending; 오름차순) / DESC
(Descending; 내림차순)PRIMARY KEY
는 UNIQUE INDEX
를 포함
PRIMARY KEY
와 UNIQUE INDEX
는 데이터베이스가 별도로 컬럼을 관리
⇒ 조회 시 속도가 빨라진다.
테이블 설정
COMMENT
DEFAULT CHARACTER SET
utf8
등ENGINE
MyISAM
, InnoDB
등
자료에서는 InnoDB
사용
테이블 확인 명령어
DESC [테이블명]
테이블 제거 명령어
DROP TABLE [테이블명]
워크벤치 사용 : p. 300 ~ 302
다른 테이블의 기본 키를 저장하는 컬럼
외래 키 지정 명령어
CONSTRAINT [제약조건명] FOREIGN KEY [컬럼명] REFERENCES [참고하는 컬럼명]
ON UPDATE
/ ON DELETE
이벤트 - 수정 / 삭제
옵션 CASCADE
테이블 전체 리스트 표시 명령어
SHOW TABLES
워크벤치 사용 : p. 304 ~ 305
p. 306 ~ 314
CRUD
Create / Read / Update / Delete의 첫 글자를 모은 두문자어
데이터베이스에서 많이 수행하는 네 가지 작업
데이터를 생성해서 데이터베이스에 넣는 작업
명령어
INSERT INTO [테이블명] ([컬럼1], [컬럼2], …) VALUES ([값1], [값2], …)
워크벤치 사용 : p. 307 ~ 309
데이터베이스의 데이터를 조회하는 작업
명령어
모든 데이터를 조회
SELECT * FROM [테이블명]
특정 컬럼만 조회
SELECT [컬럼명1], [컬럼명2], ... FROM [테이블명]
특정 조건의 데이터만 조회
WHERE
절 사용 → SQL 끝
AND
, OR
로 조건을 묶을 수 있다.
SELECT [컬럼명1], [컬럼명2], ... FROM [테이블명] WHERE [조건]
SELECT name, age FROM nodejs.users WHERE married = 1 OR (age > 30 AND age < 45);
데이터 정렬 후 조회
ORDER BY [컬럼명] [ASC | DESC]
키워드 → SQL 끝
ex. SELECT id, name FROM nodejs.users ORDER BY age DESC;
조회할 로우 개수 설정
LIMIT [숫자]
키워드 → SQL 끝
ex. SELECT id, name FROM nodejs.users ORDER BY age DESC LIMIT 1;
로우 개수 설정과 함께 몇 개를 건너뛸지 설정
게시판 등의 페이지네이션 기능 구현에 유용
OFFSET [건너뛸 숫자]
키워드 → SQL 끝
ex. SELECT id, name FROM nodejs.users ORDER BY age DESC LIMIT 1 OFFSET 1;
워크벤치 사용 : p. 312
데이터베이스에 있는 데이터를 수정하는 작업, 덮어쓰기
명령어
UPDATE [테이블명] SET [컬럼명=바꿀 값] WHERE [조건]
워크벤치 사용 : p. 313
데이터베이스에 있는 테이터를 삭제하는 작업
명령어
DELETE FROM [테이블명] WHERE [조건]
워크벤치 사용 : p. 314