Node.js lv3 과제
- mongoDB로 작성된 db를 Sequlieze라이브러리를 사용하여 MySQL로 변경하기
- 기존 mongoose 명령어와 큰 차이 없이 동작원리가 거의 동일하여 MySQL로 DB를 변경하는데 어려움이 없었다.
Migration 생성
- nickname컬럼을 수정해주지 않은 부분과 컬럼에서 UserId가 아닌 userId로 변경해주기 위해 Migration을 생성하여 DB를 수정하였다
npx sequelize migration:create --name 생성하려는migrate파일이름
- 생성된 Mirgration 파일, Migration파일을 위에서부터 아래로 실행되기 때문에 수정하려는 파일이 참조하려는 파일보다 아래에 있어야한다.
Column수정
테이블에 입력된 컬럼의 값을 변경하기 위해 renameColumn메서드를 사용하여 Posts테이블에 있는 UserId를 userId로 변경후, Model 파일에서 UserId를 수정해주고, Migration 파일에서도 UserId를 수정해주었다.
await queryInterface.renameColumn("테이블명", "수정하려는컬럼이름", "수정할컬럼이름")
- renameColumn메서드를 사용해 DB에 생성된 컬럼의 이름을 수정해주었다
module.exports = {
async up(queryInterface, Sequelize) {
await queryInterface.renameColumn("Posts", "UserId", "userId")
},
async down(queryInterface, Sequelize) {
}
};
- 테이블 생성, 컬럼 추가 같은 디비 속성이 변경 되는 기능은 up에 작성 하고
- 컬럼 삭제, 전 속성으로 롤백 하는 기능은 down에 작성을 한다.
수정된 Migarate적용
- 수정된 Migatate를 DB에 적용하기 위한 CLI이다.
npx sequelize db:migrate
- DB에서 수정된 Column확인
DB에 nickname Column추가하기
- addColumn메서드를 사용하여 DB에 누락된 nickname 컬럼을 추가해주었다
await queryInterface.addColumn("테이블명", "추가할컬럼이름", {
속성1: false, // NOT NULL
속성2: Sequelize.STRING,
})
module.exports = {
async up(queryInterface, Sequelize) {
await queryInterface.addColumn("Posts", "nickname", {
allowNull: false, // NOT NULL
type: Sequelize.STRING,
})
수정된 Migarate적용
npx sequelize db:migrate
- DB의 맨 마지막에 nickname이라는 컬럼이 생성되었다.
기타 필요한 함수
- 테이블을 추가 : createTable()
// await queryInterface.createTable(테이블명, 컬럼명:데이터(속성,옵션) ...)
await queryInterface.createTable('goodsLogs', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
userIndex: {
type: Sequelize.STRING,
allowNull: false
}
})
- 테이블을 제거 : dropTable()
await queryInterface.dropTable('테이블명')
- 테이블에 컬럼추가 : addColumn()
//await queryInterface.addColumn(테이블명, 추가하는 컬럼명, {
// type: 컬럼 데이터 속성
// })
await queryInterface.addColumn('goodsLogs', 'test2', {
type: Sequelize.INTEGER
})
- 테이블에 컬럼제거 : removeColumn()
//await queryInterface.removeColumn(테이블명, 제거하는 컬럼 명)
await queryInterface.removeColumn('goodsLogs', 'test2')
- 컬럼이름변경 : renameColumn()
//await queryInterface.renameColumn(테이블명, 컬럼 이름 변경 전 , 컬럼 이름 변경 후 )
await queryInterface.renameColumn('goodsLogs', 'test2', 'test1')
- 컬럼데이터 속성변겅 :changeColumn()
// await queryInterface.changeColumn(테이블명, 컬럼명, {
// 컬럼 데이터 속성,
// 컬럼 옵션
// })
await queryInterface.changeColumn('goodsLogs ', 'test2', {
type: Sequelize.INTEGER,
allowNull: true
})
내일할일: 깃허브 lv3 이슈작성하기, 미들웨어 try catch 수정하기, lv4강의 듣기
'개발일지' 카테고리의 다른 글
개발일지 40일차 (0) | 2023.04.28 |
---|---|
MySQL Workbench AWS연동하기 (0) | 2023.04.26 |
개발일지 38일차 (0) | 2023.04.25 |
개발일지 37일차 (0) | 2023.04.24 |
개발일지 3주차 WIL (0) | 2023.04.24 |