Document는 동적(dynamic)의 schema 를 갖고있다. 같은 Collection 안에 Document 끼리 다른 schema를 갖고 있을 수 있다.
(즉, 서로 다른 데이터들을 가지고 있을 수 있다.)
3. Collection
Collection은 MongoDB Document의 모음이다. Doucment들이 Collection내부에 위치하고 있다. RDMS의 비슷한 개념이지만 RDMS와 달리 따로 Schema를 가지고 있지 않다. Document 부분 설명에 나와있듯이 각 Document들이 동적인 schema를 가지고 있다.
RDMS와의 비교
RDBMS
MongoDB
Database
Database
Table
Collection
Tuple / Row
Document
Column
Key / Field
Table Join
Embeded Documents
Primary Key
Primay Key (_id)
mysqld
mongod
mysql
mongo
4. 장점
- Schema-less (Schma 가 없다. 같은 Collection 안에 있을지라도 다른 Schema를 가지고 있을 수 있다.)
- 각 객체의 구조가 뚜렷하다
- 복잡한 Join이 없다
- Deep Query ability 문서 지향적 Query Language 를 사용하여 SQL 만큼 강력한 Query 성능을 제공한다.
-- 기본 인코딩 방식은 utfmb4
-- mb4 : most bytes 4 : 4byte씩 사용하는 utf8 문자 집합으로 유니코 문자를 지원하겠다.
-- utfmb4 : 4byte씩 사용하는 utf8 문자 집합으로 유니코드 문자를 지원하겠다. (전세계 문자 + 이모티콘 사용 가능)
-- general : 비교 정렬 규칙을 정의
-- ci : 대소문자 구분 안함.
-- JAKA 라는 이름의 데이터베이스를 만들겠다
CREATE DATABASE JAKA DEFAUTL CHARACTER SET utfmb4 COLLATE utf8mb4_general_ci;
2. Database 보기
SHOW DATABASES;
3. Database 삭제
-- JAKA 라는 이름의 데이터베이스 삭제
DROP DATABASE JAKA;
4. Database 사용
-- JAKA 라는 데이터베이스를 사용하겠다.
USE JAKA;
5. 현재 사용중인 데이터베이스의 테이블 내용을 확인
SHOW TABLES;
6. 테이블 생성
-- CREATE TABLE 테이블 이름 (컬럼이름 데이터타입 옵션)
-- AUTO_INCREMENT : 자동으로 증가한다. (인덱스 형태를 의미)
-- 테이블에 열이 하나씩 추가될 때마다 증가
-- PRIMARY KEY : 고유한 키 하나만 존재할 수 있다
-- VARCHAR : 256Byte의 가변 데이터 (우리가 20자까지 사용을 안하면 알아서 맞춘다.)
CREATE TABLE store(id INT AUTO_INCREMENT PRIMARY KEY, tel VARCHAR(20));
7. 테이블의 필드명 확인
-- store라는 테이블의 필드를 보여준다
DESC store;
8. 테이블 값 추가
-- NOT_NULL : NULL 값이 들어갈 수 없다. 즉, 빈 값을 넣을 수 없다는 의미다
-- DEFAULT : 입력을 안하면 남자로 기본값이 들어간다
CREATE TABLE user(
user_id VARCHAR(20) PRIMARY KEY,
user_pw VARCHAR(20) NOT_NULL,
user_name VARChAR(10) NOT_NULL,
gender CHAR(4) DEFAULT '남자',
date DATETIME DEFAULT now()
);
-- 괄호의 순서대로 값을 할당하겠다.
-- VALUES(추가할 데이터 내용들)
-- PRIMARY KEY는 같은 값이 포함되면 데이터가 들어가지 않는다.
INSERT INTO user(user_id, user_pw, user_name) VALUES ('userid0', '123', 'jaka1');
9. 조회
-- * : 모든 필드를 의미
-- user : 조회하고 싶은 테이블
SELECT * FROM user;
-- 조회를 할 때 원하는 필드의 내용을 찾아서 조회
-- WHERE 조회할 속성을 정해줄 수 있다.
-- user_id가 userid0 인 값의 모든 필드명 조회
SELECT * FROM user WHERE user_id = 'userid0';
-- user_id, user_name 필드명을 user_name이 jaka1에서 조회
SELECT user_id, user_name FROM user WHERE user_name = 'jaka1;
-- 테이블의 값 오름차순 내림차순 조회
-- DESC : 필드명 기준 내림차순 / ASC : 필드명 기준 오름차순
SELECT * FROM 이름 ORDER BY 필드이름 DESC/ASC;
-- 테이블의 값을 조회할 때 시작 데이터 조회
-- A로 시작하는 데이터를 가지고 있는 row 들을 조회
SELECT * FROM 테이블이름 WHERE 필드 LIKE 'A%';
-- A로 끝나는 데이터를 가지고 있는 row들을 조회
SELECT * FROM 테이블이름 WHERE 필드 LIKE '%A';
10. 값 수정
-- UPDATE 테이블명 SET 변경할필드='값' WHERE 필드명='필드ID';
UPDATE user SET gender='남자', user_name='jakas' WHERE user_id='userid0';
11. 테이블 삭제
-- user 테이블에서 user_id가 userid0 인 값을 삭제
DELETE FROM user WHERE user_id='userid0';
12. 테이블 이름 바꾸기
ALTER TABLE 테이블이름 RENAME 변경이름;
13. 컬럼의 이름, 데이터 타입 바꾸기
ALTER TABLE 이름 CHANGE 기존컬럼이름 새로운컬럼이름 데이터타입;
14. 컬럼의 타입만 변경
ALTER TABLE 테이블명 MODIFY 컬럼의이름 수정할데이터타입;
15. 필드를 제거
ALTER TABLE 테이블이름 DROP 필드이름;
16. 필드 추가
-- 필드 추가
-- 필드 맨뒤로 추가
ALTER TABLE 이름 ADD 필드이름 데이터타입
-- 필드 맨앞 추가
ALTER TABLE 이름 ADD 필드이름 데이터타입 first;