본문 바로가기
DB/SQL

[MySQL] dbmate 활용해서 DB쉽게 구성하기

by 싯벨트 2022. 8. 28.
728x90

기존방법으로 MySQL DB 만들기 

Mysql에서 table을 구성하려면 다음과 같은 절차를 거쳐야 한다.

 

예제로 쓸 DB를 만들면

mysql> create database example;
Query OK, 1 row affected (0.00 sec)

테이블이 없는 상태다

mysql> use example;
Database changed
mysql> show tables;
Empty set (0.00 sec)

create table <테이블명> 뒤에 컬럼명과 속성들, 그리고 고유키를 설정해준다. 

mysql> create table users 
(id int not null auto_increment, 
name varchar(50) not null, 
email varchar(200) not null, 
primary key (id));
Query OK, 0 rows affected (0.01 sec)

짠 완성이다.

mysql> desc users;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int          | NO   | PRI | NULL    | auto_increment |
| name  | varchar(50)  | NO   |     | NULL    |                |
| email | varchar(200) | NO   |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)

근데 너무 귀찮다.. 테이블이 100개라면? 1만개라면..? 그리고 나와 협업하는 동료에게 DB 내부 수많은 테이블을 전달하려면..?

음....그래서 우리는 dbmate를 사용해본다.

👉 dbmate 공식문서 

 

설치하고

npm install dbmate

환경변수를 관리하는 .env 파일을 만들어서 DATABASE_URL을 설정한다. 

DATABASE_URL="mysql://USERNAME:PASSWARD@HOST:PORT/DATABASE"

진행하는 디렉토리 바로 하위에 db디렉토리를 만들고 table을 형성하는 명령어를 입력해주면 migrations 디렉토리가 형성되며 내부에 테이블에 관한 .sql 파일이 형성된다. 

 

dbmate new create_users_table;

생성된 파일 내부의 -- migrate:up // -- migrate:down 에 테이블 정보를 입력하고

-- migrate:up
CREATE TABLE users(
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  name varchar(200) NOT NULL,
  email VARCHAR(500) NOT NULL,
  password VARCHAR(2000) NOT NULL,
  phone_number VARCHAR(300) NOT NULL,
  point DECIMAL(6,0) NULL DEFAULT 100000,
  CONSTRAINT user_email UNIQUE (email)
);

-- migrate:down
DROP TABLE users;

원하는 테이블 마큼 위의 단계를 반복해주면 다음과 같이 테이블 마다 파일이 형성된다.

그리고 터미널에서 dbmate up 명령어를 쓰면, schema.sql 파일이 형성되고, 진행했던 스키마 내부에 테이블도 형성된다. 

 mysql> show tables;
+----------------------+
| Tables_in_example    |
+----------------------+
| categories           |
| images               |
| products             |
| products_images      |
| products_information |
| reviews              |
| schema_migrations    |
| users                |
+----------------------+
8 rows in set (0.00 sec)

이제 해당 DATABASE에 값들을 넣고 진행하면 되는데... CSV 파일을 DB에 넣는 과정은 이어지는 글을 통해 살펴보도록 하자.

 

 

 

'DB > SQL' 카테고리의 다른 글

[SQL] MySQL 활용 쿼리문 살펴보기  (0) 2022.08.09