出問題回不到上個版本?
忘記做了哪些修改?
改了schema沒人知道?
透過migration幫你解決困擾吧~
Migration 是用來描述「資料庫的架構長什麼樣子」的檔案,隨著專案開發的過程中逐漸增加。
可以理解成是對資料庫的變更做版本控制
是nodejs的 ORM框架
可以理解成與資料庫溝通的框架
環境:nodejs, mysql
mysql -u user -p -e "create database demo"
mkdir demo && cd demo
npm init
npm install -g sequelize-cli
cli也可以安裝在專案底下
npm install --save sequelize mysql2
sequelize init
修改config裡,連接DB的參數
"development": {
"username": "user",
"password": "password",
"database": "database name",
"host": "127.0.0.1",
"dialect": "mysql"
},
sequelize model:generate --name user --attributes name:string,mail:string
這時候下指令會建立一張user"s" table
所以要去修改一下剛剛產生在migration底下的js檔案裡面的code,將users 改成user
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('users', {
.
.
.
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('users');
}
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('user', {
.
.
.
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('user');
}
修改完成之後,就可以下指令建一張新的table啦~
sequelize db:migrate
這個指令會自動建立到最後一個migration檔案
sequelize migration:generate --name add_phone_to_user
up: function (queryInterface, Sequelize) {
queryInterface.addColumn(
'user',
'phone',
{
type: Sequelize.STRING,
allowNull: true
}
)
},
down: function (queryInterface, Sequelize) {
return queryInterface.removeColumn('driver_payments', 'phone')
}
可以建立也可以回溯
sequelize db:migrate:undo
一次退一個版本
sequelize db:migrate:undo:all
退到初始狀態
sequelize db:migrate:undo:all --to XXXXXXXXXXXXXX-create-user.js
退到指定版本