//데이터베이스 생성명령
//CREATE SCHEMA [데이터베이스명];
//DEFAULT CHARACTER SET utf8 : 한글을 사용할 수 있게 함.
mysql> CREATE SCHEMA `nodejs` DEFAULT CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)
//데이터베이스 사용명령
//USE [데이터베이스명];
mysql> USE nodejs
Database changed
//테이블생성
//CREATE TABLE [데이터베이스명.테이블명];
//CREATE TABLE nodejs.users : nodejs 데이터베이스매에 users 테이블 생성을 의미.
mysql> CREATE 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,
-> created_at DATETIME NOT NULL DEFAULT now(),
-> PRIMARY KEY(id),
-> UNIQUE INDEX name_UNIQUE (name ASC))
-> COMMENT = '사용자정보'
-> DEFAULT CHARACTER SET = utf8
-> ENGINE = InnoDB;
Query OK, 0 rows affected (0.01 sec)
//column(세로줄),row(가로줄)
//field : 세로줄과 가로줄이 교차하는 칸
*자료형
1. INT : -2147483648~2147483647까지의 정수 (소수까지저장:FLOAT 혹은 DOUBLE)
2. VARCHAR(자릿수) : 가변길이
3. CHAR(자릿수) : 반드시 자릿수 만큼 문자열이 들어감(짧다면 스페이스가 채워짐)
4. TEXT : 긴 글을 저장할 때, 보통 수백자 보다 길 때
5. TINYINT : -128~127까지의 정수.
6. DATETIME : 날짜와 시간 정보.
7. DATE : 날짜정보
8. TIME : 시간정보
*옵션
1. NULL, NOT NULL : 빈칸 허용 여부.
2. AUTO_INCREMENT : 자동 숫자 부여
3. UNSIGNED : 숫자 자료형에 적용되는 옵션. 음수는 무시되고 0부터 저장.
4. ZEROFILL : 숫자의 자리수가 고정되어 있을 때 사용. 비어 있는 자리에 모두 0을 넣음. ex)0001
5. DEFAULT : 값이 없다면 mySQL이 기본값을 대신 넣음.
6. now(): 현재 시각.
7. PRIMARY KEY : 기본키, 로우를 대표하는 고유한 값.
8. UNIQUE INDEX : 해당값이 고유해야 하는지에 대한 옵션.
- UNIQUE INDEX name_UNIQUE (name ASC) : 네임컬럼을 오름차순으로 기억.
- PRIMARY KEY 나 UNIQUE INDEX 는 데이터베이스가 별도롬 컴럼을 관리 조회하므로 조회 시 속도가 빠름.
*테이블 자체에 대한 설정
1. COMMENT : 테이블에 대한 보충설명. 필수는 아님.
2. DEFAULT CHARACTER SET utf8 : 설정하지 않으면 한글이 입력이 안됨. 반드시 설정.
3. ENGINE : MYISAM과 InnoDB 가 가장 많이 쓰임.
//테이블 확인
//DESC [테이블명];
mysql> DESC users;
+------------+------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | UNI | NULL | |
| age | int(10) unsigned | NO | | NULL | |
| married | tinyint(4) | NO | | NULL | |
| comment | text | YES | | NULL | |
| created_at | datetime | NO | | current_timestamp() | |
+------------+------------------+------+-----+---------------------+----------------+
6 rows in set (0.02 sec)
//테이블 삭제
//DROP TABLE [테이블명];
mysql> drop table users;
Query OK, 0 rows affected (0.02 sec)
//사용자의 댓글을 저장하는 테이블 생성
mysql> CREATE TABLE nodejs.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 nodejs.users (id)
-> ON DELETE CASCADE
-> ON UPDATE CASCADE)
-> COMMENT = '댓글'
-> DEFAULT CHARSET=utf8mb4
-> ENGINE=InnoDB;
Query OK, 0 rows affected (0.02 sec)
*옵션
1. 외래키 : 다른 테이블의 기본키를 저장하는 칼럼.
- CONSTRAINT [제약조건명] FOREIGN KEY [칼럼명] REFERENCES[참고하는 칼럼명];
2. ON UPDATE CASCADE, ON DELETE CASCADE : 사용자 정보가 수정되거나 삭제되면 연결된 댓글정보도 같이 수정하거나 삭제.
-데이터 불일치 현상 방지
//테이블명 확인
mysql> SHOW tables;
+------------------+
| Tables_in_nodejs |
+------------------+
| comments |
| users |
+------------------+
2 rows in set (0.00 sec)