본문 바로가기

Database/SQL - MySQL

MySQL - 설치, 워크벤치, 첫 데이터베이스 생성 (Installation, Workbench, Creating First Database)

설치

https://m.blog.naver.com/bjh7007/221829548634

 

[MySQL] MySQL 다운로드 및 설치 방법(Workbench)

안녕하세요 이번에는 MySQL을 Windows10 운영체제에서 간단히 설치하는 방법에 대해서 알아보도록 하...

blog.naver.com

 

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