반응형
지금까지 배운걸 종합해서 간단한 CRUD구현해보기
👉 데이터베이스 테이블 생성
데이터베이스 생성
mysql> create database typeorm_prac character set utf8mb4 collate utf8mb4_general_ci;
dbmate
db 변경 이력을 남겨서 관리하기 위한 파일을 migration파일이라고 하는데 이 migration파일들을 관리하는 프로그램중 하나이다.
설치
npm install dbmate
📌 npm으로 프로젝트 내부에 설치된 프로그램 실행하는법
npm으로 dbmate를 설치하면 그냥 터미널에서는 dbmate명령어를 사용할 수 없다.
이때 npx 명령어를 사용하면 된다(poetry run과 같은 동작을 하는 명령어) 프로젝트 내부에서 프로그램을 돌린다.
npm 5.2.0부터 자동설치..낮은버전이라면 수동으로 npx를 설치해서 사용 가능
db연결
.env파일 안에 본인db에 맞춰 아래처럼 적어서 db와 연결한다
DATABASE_URL="mysql://username:password@127.0.0.1:3306/database_name"
migration파일 생성
$ npx dbmate new create_books_table
$ npx dbmate new create_authors_table
$ npx dbmate new create_books_authors_table
이렇게 프로젝트 안에 db폴더가 만들어지고 그 안에 migrations폴더 안에 파일들이 생긴다.
-- migrate:up
-- migrate:down
migration 파일은 이렇게 생겼는데
migrate:up 아래는 적용할 sql문을 적어주고
migrate:down아래는 위에 적용한 sql문을 되돌리는 sql문을 적어주면 된다.
(테이블 생성을 했다면 테이블 삭제하는 sql문, 테이블 이름을 변경했다면 다시 이전 이름으로 변경하는sql문)
# create_books_table.sql
-- migrate:up
CREATE TABLE books (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(100) NOT NULL,
description VARCHAR(2000) NULL,
cover_image VARCHAR(1000) NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- migrate:down
DROP TABLE books;
# create_authors_table.sql
-- migrate:up
CREATE TABLE authors (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
age INT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- migrate:down
DROP TABLE authors;
# create_books_authors_table.sql
-- migrate:up
CREATE TABLE books_authors (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
book_id INT NOT NULL,
author_id INT NOT NULL,
CONSTRAINT books_authors_book_id_fkey FOREIGN KEY (book_id) REFERENCES books (id) ON DELETE CASCADE,
CONSTRAINT books_authors_author_id_fkey FOREIGN KEY (author_id) REFERENCES authors (id) ON DELETE CASCADE
);
-- migrate:down
DROP TABLE books_authors;
migrate
마이그레이션 파일을 db에 실제로 적용하는 작업
$ npx dbmate up
schema.sql은 migration을 통해 데이터베이스에 생긴 변화를 모두 기록하는 파일.
반응형
'TIL' 카테고리의 다른 글
node.js | 인스타그램: 서버-db연결, 회원가입 (1) | 2022.10.03 |
---|---|
node.js | express, TypeORM 적용한 CRUD API만들기 - 2 API작성 (0) | 2022.10.02 |
node.js | TypeORM 적용하기 (0) | 2022.10.01 |
LeetCode | 009. Palindrome Number (0) | 2022.09.28 |
node.js | 인스타그램: 데이터베이스 구축 (0) | 2022.09.27 |