설치
https://m.blog.naver.com/bjh7007/221829548634
MySQL의 설치는 위 포스트를 보면서 하자. 나는 책을 보면서 따라했다.
워크벤치
워크벤치는 데이터베이스 내부에 저장된 데이터를 시각적으로 관리할 수 있게 해준다. 콘솔로도 동일한 작업을 할 수 있기 때문에 꼭 필요한 것은 아니다. 그러나 편의성 때문에 설치하고 사용할 가치는 충분히 있다.
윈도우를 사용하면 워크벤치를 MySQL과 함께 설치할 수 있다.
설치 후 MySQL Connections에 DB가 커넥트되어 있다면 위와 같은 블록이 생성될 것이다 이제 이 블록에 접속하면 (비밀번호를 입력하고),
이와 같은 페이지가 나타나게 된다.
첫 데이터베이스 생성하기
MySQL의 설치가 끝났다면 이제 데이터베이스를 생성할 수 있다. 콘솔을 사용하는 방법과, 워크벤치는 사용하는 방법이 있는데, 워크벤치를 사용하는 방법이 더 간편하지만, 콘솔을 사용하는 것과 결과가 살짝 다를 수 있으므로 콘솔을 사용하여 생성을 해보도록 하겠다.
데이터베이스 생성
먼저 MySQL 프롬프트에 접속을 하자. MySQL이 설치되어 있는 폴더를 찾아 들어가서 MySQL에 접속해보자. 내 컴퓨터의 경우 MySQL은 C:\Program Files\MySQL\MySQL Server 8.0\bin 에 설치되어 있다. 들어가서 아래와 같이 콘솔에 입력해주고 패스워드를 입력하여 mysql에 접속하자.
C:\Program Files\MySQL\MySQL Server 8.0\bin>mysql -h localhost -u root -p
데이터베이스를 생성하는 명령어는 CREATE SCHEMA [데이터베이스 명]이다. SCHEMA (스키마) 는 MySQL에서 데이터베이스와 같은 개념이다. nodejs라는 이름의 데이터베이스를 생성해보자. 그 후 use nodejs; 명령어를 추가로 입력하여 앞으로 nodejs 데이터베이스를 사용하겠다는 것을 MySQL에 알린다.
mysql> CREATE SCHEMA `nodejs` DEFAULT CHARACTER SET utf8;
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql> use nodejs;
Database changed
위 nodejs 데이터베이스 이름을 감싸고 있는 것은 백틱 (backtick) 이므로 주의하도록 하자 (따옴표가 아니다).
위 CREATE SCHEMA와 같이 MySQL이 기본적으로 알고 있는 구문을 예약어라고 한다. 예약어는 소문자로 써도 되지만 대문자로 쓰는 것이 좋다. 이는 nodejs 와 같이, 사용자가 직접 만든 이름과 구분하기 위해서이다.
왼쪽의 SCHEMAS 탭에 nodejs 데이터베이스가 생성되었다면 성공이다.
테이블 생성하기
데이터베이스를 생성했으니 이제 테이블을 만들어보자. 테이블이란 데이터가 들어갈 수 있는 틀을 의미하며, 테이ㅡㄹ에 맞는 데이터만 들어갈 수 있다. 사용자의 정보를 저장하는 테이블을 만들어보자.
MySQL 프롬프트에 다음과 같이 입력한다.
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, 1 warning (0.07 sec)
한 글자라도 잘못 입력하면 에러가 발생하니 조심하자. 명령어를 살펴보면,
- CREATE TABLE [데이터베이스명.테이블명]: 해당 데이터베이스에 테이블을 생성한다. 아까 use nodejs; 명령어를 실행했었으니 앞의 데이터베이스명은 생략해도 된다.
- 아래에는 한 줄씩 콤마로 구분하여 컬럼들을 만들었다. 순서대로 id(고유 식별자), name(이름), age(나이), married(결혼 여부), comment(자기소개), created_at(로우 생성일) 이다.
그 옆에 있는 컬럼의 자료형과 옵션들에 대해서는 다음 포스트에서 다뤄보도록 하겠다.
이제 테이블을 확인해보자. DESC [테이블명]; 으로 확인할 수 있다.
mysql> DESC nodejs.users;
+------------+--------------+------+-----+-------------------+-------------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+-------------------+-------------------+
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | UNI | NULL | |
| age | int unsigned | NO | | NULL | |
| married | tinyint | NO | | NULL | |
| comment | text | YES | | NULL | |
| created_at | datetime | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
+------------+--------------+------+-----+-------------------+-------------------+
6 rows in set (0.00 sec)
만약 테이블을 잘못 만들었을 경우 DROP TABLE [테이블명] 명령어로 제거할 수 있다. 제거 후 해당 테이블명으로 다시 생성할 수 있다.
이번에는 사용자의 댓글을 저장하는 테이블을 만들어보자.
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.06 sec)
comments 테이블에는 id, commenter (댓글을 쓴 사용자 아이디), comment (댓글 내용), created_at(로우 생성일) 컬럼이 있다.
commenter 컬럼엔 댓글을 작성한 사용자의 id를 저장할 것인데, 이렇게 다른 테이블의 기본 키를 저장하는 컬럼을 외래 키 (foreign key) 라고 부른다. CONSTRAINT [제약조건명] FOREIGN KEY [컬럼명] REFERENCES [참고하는 컬럼명]으로 외래 키를 지정할 수 있다.
comments 테이블에서는 commenter 컬럼과 user 테이블의 id 컬럼을 연결시켰다. 다른 테이블의 기본 키이므로, commenter 컬럼에 인덱스도 걸어보았다.
그 후 ON UPDATE와 ON DELETE는 모두 CASCADE로 설정했는데, 이는 사용자 정보가 수정되거나 삭제되면 그것과 연결된 댓글 정보도 같이 수정하거나 삭제한다는 뜻이다. 그래야 데이터가 불일치하는 현상이 나타나지 않는다. 이제 SHOW TABLES; 라는 명령어로 users 테이블과 comments 테이블이 제대로 생성되었는지 확인해보자.
mysql> SHOW TABLES;
+------------------+
| Tables_in_nodejs |
+------------------+
| comments |
| users |
+------------------+
2 rows in set (0.00 sec)
위의 두 테이블이 나타난다면 성공이다.
출처
Node.js 교과서 개정 2판 - 길벗, 조현영
https://m.blog.naver.com/bjh7007/221829548634
'Database > SQL - MySQL' 카테고리의 다른 글
MySQL - CRUD 명령어 (CRUD Commands) (0) | 2020.08.12 |
---|---|
MySQL - 자료형과 옵션 (Data Types and Options) (0) | 2020.08.11 |