Sequelize (DB 테이블 변경) Migration 사용 방법

2021. 12. 14. 19:53Mysql, Sequelize

Migration

모델의 데이터 형식, 컬럼 추가, 제거, 테이블 추가, 테이블 제거와 같은 운영중인 서버 에서 DB 변경 작업 시 편리하게 도와준다.

 

이용 방법 :

model 먼저 수정 하고 진행한다.

하나의 파일을 수정 하면서 쓰지 않고 변경이 생길 때 마다 Migration을 생성하여 이용한다.

생성

명령어 입력을 해서 migration파일을 만들면

sequelize migration:create --name 생성하는 migration 이름

타임스탬프가 적용된 .js 파일이 생성이 된다.

파일을 열어보면 

module.exports = {
  up: async (queryInterface, Sequelize) => {

  },

  down: async (queryInterface, Sequelize) => {

  }
}

이 있고 up = 마이그레이션 down = 롤백 의 기능을 담당한다.

테이블 생성, 컬럼 추가 같은 디비 속성이 변경 되는 기능은 up에 작성 하고

컬럼 삭제, 전 속성으로 롤백 하는 기능은 down에 작성을 한다.

 

migrate 적용

변경 적용

sequelize db:migrate

변경 한 migration를 디비에 적용 시킨다.

--env 속성

속성을 주어서 개발DB, 프로덕션DB, 테스트DB 따로 따로 migration을 적용 시켜 줄 수 있다.

default로는 development 로 설정 되어 있다.

ex)

sequelize db:migrate --env development
sequelize db:migrate --env test
sequelize db:migrate --env production

롤백

--env 속성 적용 가능

sequelize db:migrate:undo

전체 롤백

--env 속성 적용 가능

모든 마이그레이션을 되돌린다.

sequelize db:migrate:undo:all

 

1. 테이블을 새로 만들어야 할 때

createTable() 함수를 사용

// await queryInterface.createTable(테이블명, 컬럼명:데이터(속성,옵션) ...)
await queryInterface.createTable('goodsLogs', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      userIndex: {
        type: Sequelize.STRING,
        allowNull: false
      }
    })

 

2. 테이블을 drop 시킬 때

dropTable() 함수 사용

//테이블 명
await queryInterface.dropTable('goodsLogs')

 

3. 테이블에 컬럼을 추가 할 때

addColumn() 함수 사용

//await queryInterface.addColumn(테이블명, 추가하는 컬럼명, {
//      type: 컬럼 데이터 속성
//    })
await queryInterface.addColumn('goodsLogs', 'test2', {
      type: Sequelize.INTEGER
    })

 

4. 테이블에 컬럼을 제거 할 때

removeColumn() 함수 사용

//await queryInterface.removeColumn(테이블명, 제거하는 컬럼 명)
await queryInterface.removeColumn('goodsLogs', 'test2')

 

5. 컬럼 명 변경

renameColumn() 함수 사용

//await queryInterface.renameColumn(테이블명, 컬럼 이름 변경 전 , 컬럼 이름 변경 후 )
await queryInterface.renameColumn('goodsLogs', 'test2', 'test1')

 

6. 컬럼 데이터 속성값 변경

changeColumn() 함수 사용

// await queryInterface.changeColumn(테이블명, 컬럼명, {
//      컬럼 데이터 속성,
//      컬럼 옵션
//  })

await queryInterface.changeColumn('goodsLogs ', 'test2', {
      type: Sequelize.INTEGER,
      allowNull: true
    })

 

 

 

 

출처 : 

https://jeonghwan-kim.github.io/sequelize-migration/

https://stackoverflow.com/questions/62667269/sequelize-js-how-do-we-change-column-type-in-migration

https://stackoverflow.com/questions/55114922/change-column-name-sequilize

728x90
반응형