데이터 베이스는 관련성을 가지며 중복이 없는 데이터들의 집합이다.
이러한 데이터베이스를 관리하는 시스템을 DBMS라고 부르며 계속 데이터가 보존되므로 서버 종료 여부와 상관없이 데이터를 지속적으로 사용할 수 있다.
1. 데이터베이스 생성하기
- 예약어는 대문자로 쓰는 것 추천 (nodejs와 같은 사용자가 직접 만든 이름과 구분하기 위해서)
- 예약어 끝에는 세미콜론(;)을 붙혀야 실행됨
CREATE SCHEMA [데이터베이스 명];
//DEFAULT CHARCTER SET utf8: 한글 사용
mysql> CREATE SCHEMA `nodejs` DEFAULT CHARCTER SET utf8;
mysql> use nodejs;
2. 테이블
- 테이블이란 데이터가 들어갈 수 있는 틀을 의미하며, 테이블에 맞는 데이터만 들어갈 수 있음.
- 테이블 생성
CREATE TABLE [데이터베이스 명, 테이블 명];
mysql> CREATEJ TABLE nodejs.users(
-> id INT NOT NULL AUTO_INCREMENT,
-> name VARCHAR(20) NOT NULL,
-> age INT UNSIGNED NOT NULL,
-> married TINYINT NOT NULL,
-> comment TEXT NULL,
-> create_at DATETIME NOT NULL DEFAULT now(),
-> PRIMARY KEY(id),
-> UNIQUE INDEX name_UNIQUE (name ASC))
-> COMMENT = '사용자 정보'
-> DEFAULT CHARACTER SET = utf8
-> ENGINE = InnoDB;
2-1. 컬럼 자료형
- INT: 정수 (소수까지 저장하고 싶으면 FLOAT 또는 DOUBLE 자료형을 사용)
- VARCHAR(자릿수): 가변 길이
- VARCHAR(10): 0~10인 문자열 가능
- CHAR(자릿수): 고정 길이
- CHAR(10): 반드시 길이가 10인 문자열
- TEXT: 긴 글을 쓸 때 사용
- VARCHAR: 수 백자 이내의 문자열
- TEXT: 그 이상
- TINYINT: -128 ~ 127까지의 정수를 저장할 때 사용. 1 또는 0만 저장한다면 Boolean과 같은 역할 가능
- DATETIME: 날짜와 시간에 대한 정보만 담는 TIME 자료형도 있음.
2-2. 컬럼 옵션
- NULL or NOT NULL: 빈 칸을 허용할지 여부
- AUTO_INCREMENT: 숫자를 저절로 올림. id 컬럼에 설정됨
- UNSINGED: 숫자 자료형에 적용되는 옵션. 음수 무시
- INT 숫자 자료형은 기본적으로 음수 범위 지원
- FLOAT / DOUBLE에는 UN 적용 불가능
- ZEROFILL: 숫자의 자리가 고정되어 있을 때 사용가능. 비어있는 숫자의 자리에 0 입력
- INT(4) -> 0001로 비어있는 자릿수에 0으로 채워줌
- DEFAULT now(): 데이터베이스 저장 시 해당 컬럼에 값이 없으면 MySQL이 기본값을 대신 넣음. now()는 현재 시간 저장
- now() 대신 CURRENT_TIMESTAMP 가능
- 해당 컬럼이 기본 키인 경우 PRIMARY_KEY 옵션 설정
- PRIMARY_KEY란 로우를 대표하는 고유한 값 (id)
- UNIQUE INDEX: 해당 값이 고유해야 하는지에 대한 옵션
2-3. 테이블 자체 설정
- COMMENT: 테이블에 대한 보충 설명. 이 테이블이 무슨 역할을 하는지 적어두며 필수 아님
- DEFAULT CHARACTER SET: utf8로 설정하지 않으면 한글이 입력되지 않으므로 필수
- ENGINE: 엔진을 무엇으로 사용할 것인가
2-4. 외래키 (foreign key)
CONSTARINT [제약조건명] FOREIGN KEY [컬럼명] REFERENCES [참고하는 컬럼명]
2-5. CASCADE
ON DELETE CASCADE
ON UPDATE CASCADE
사용자 정보가 수정되거나 삭제되면 그것과 연결된 댓글 정보도 같이 수정하거나 삭제한다는 뜻