1-4 egg-数据库迁移

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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雾里桃花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值