数据库迁移
- 1.配置和创建迁移文件
- 1.安装mysql
- 2.在config/plugin.js文件中引入egg-sequelize插件
- 3.在 config/config.default.js里面配置
- 4.sequelize 提供了sequelize-cli工具来实现Migrations,我们也可以在egg项目中引入sequelize
- 5.egg项目中,我们希望将所有数据库Migrations相关的内容都放在database目录下,所以我们在项目根目录下新建一个 .sequelizerc 配置文件:
- 6.初始化 Migrations 配置文件和目录
- 7.执行完后会生成 database/config.json 文件和 database/migrations 目录,我们修改一下 database/config.json 中的内容,将其改成我们项目中使用的数据库配置:
1.配置和创建迁移文件
1.安装mysql
npm install --save egg-sequelize mysql2
2.在config/plugin.js文件中引入egg-sequelize插件
exports.sequelize = {
enable: true,
package: 'egg-sequelize'
}
3.在 config/config.default.js里面配置
config.sequelize = {
// 单数据库信息配置
dialect: 'mysql',
host: '127.0.0.1',
username: 'root',
password: 'root',
port: 3306,
database: 'eggapi',
//中国时区
timezone: '+08:00',
define: {
//取消数据表名复数
freezeTableName: true,
//自动写入时间戳 created_at updated_at
timestamps: true,
//字段成成软删除时间戳 deleted_at,
paranoid: true,
createdAt: 'created_at',
updatedAt: 'undated_at',
deltedAt: 'delted_at',
//所有驼峰命名格式化
underscored: true
}
};
想要操作数据库,首先要拥有数据库,没有数据库集成软件的推荐使用 upupw Ank 数据库集成软件
4.sequelize 提供了sequelize-cli工具来实现Migrations,我们也可以在egg项目中引入sequelize
npm install --save-dev sequelize-cli
5.egg项目中,我们希望将所有数据库Migrations相关的内容都放在database目录下,所以我们在项目根目录下新建一个 .sequelizerc 配置文件:
'use strict';
const path = require('path');
module.exports = {
config: path.join(__dirname, 'database/config.json'),
'migrations-path': path.join(__dirname, 'database/migrations'),
'seeders-path': path.join(__dirname, 'database/seeders'),
'models-path': path.join(__dirname, 'app/model'),
};
6.初始化 Migrations 配置文件和目录
npx sequelize init:config
npx sequelize init:migrations
7.执行完后会生成 database/config.json 文件和 database/migrations 目录,我们修改一下 database/config.json 中的内容,将其改成我们项目中使用的数据库配置:
{
"development": { //开发环境
"username": "root", //用户名
"password": 'root', //密码
"database": "eggapi", //数据库名称
"host": "127.0.0.1",
"dialect": "mysql",
"timezone": "+08:00"
},
"test": { //测试环境
"username": "root",
"password": null,
"database": "egg-sequelize-doc-unittest",
"host": "127.0.0.1",
"dialect": "mysql"
}
}
创建数据库
npx sequelize db:create
创建数据库迁移表
npx sequelize migration:generate --name=init-users //name=init-user(init-user为表名)
创建成功后,会在 database =》 migrations 中生成一个文件,文件里的up是指新建,down是指回滚
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => { //新建
/**
* Add altering commands here.
*
* Example:
* await queryInterface.createTable('users', { id: Sequelize.INTEGER });
*/
},
down: async (queryInterface, Sequelize) => { //在执行数据库降级时调用的函数,删除 users 表
/**
* Add reverting commands here.
*
* Example:
* await queryInterface.dropTable('users');
*/
}
};
新建数据表
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
/**
* Add altering commands here.
*
* Example:
* await queryInterface.createTable('users', { id: Sequelize.INTEGER });
*/
const {INTEGER, STRING, DATE, ENUM} = Sequelize;
await queryInterface.createTable('users', {
id: {
type: INTEGER, //类型 数字
primaryKey: true, //主键
autoIncrement: true //主键自增
},
userName: {
type: STRING(30), //类型 字符串
allowNull: false, //是否为空
defaultValue: '', //默认值
comment: '用户名称', //备注
unique: true, //是否唯一
},
age: INTEGER,
created_at: DATE,
updated_at: DATE,
});
},
down: async (queryInterface, Sequelize) => {
/**
* Add reverting commands here.
*
* Example:
* await queryInterface.dropTable('users');
*/
await queryInterface.dropTable('users');
}
};
用户表创建成功后就可以运行了 执行 migrate 进行数据库变更
# 升级数据库
npx sequelize db:migrate
#如果有问题需要回滚,通过 db:migrate:undo 回退一个变更
npx sequelize db:migrate:undo
#可以通过 db:migrate:undo:all 回退到初始状态
npx sequelize db:migrate:undo:all