本文是 egg Sequelize 的解析和拓展
为什么要使用Migrations
平时我们直接使用mysql的指令去建库,然后编写代码增删改查数据库。但这种方式不利于团队开发。
在项目中,数据表的结构会不断地演进,在不同的环境中(开发环境、测试环境、生产环境中),我们都需要同一套数据结构,如果快速的变更各个环境的数据表?Migrations
解决了这个问题,它帮我们管理数据结构的变更
原理
我们的每一次数据表更新,都需要新建一个Migrations
文件
Migrations
文件包含了以下信息
- 操作时间,这个在文件名上
- 数据库的相关操作,这些在
Migrations
文件的up
、down
函数中
有了这些信息,只要把所有Migrations
文件中up
函数数据库操作执行,即可以将数据表更新到最新状态
注意:所有的数据表修改操作,必须使用Migrations
文件,不能直接使用sql
直接更新,否则无法利用Migrations
正确迭代和回退数据库版本
创建一次数据库的迭代
执行命令
npx sequelize migration:generate --name=<操作名称>
执行后,会生成一个 Migrations
文件 (<时间>-init-<操作名称>.js),代表新的一次迭代
up
执行 npx sequelize db:migrate
升级版本
升级版本的时候会调用up
函数,需要在函数中对数据表进行更新迭代(创建、修改、删除)
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('users', { id: Sequelize.INTEGER });
}
down
执行 npx sequelize db:migrate:undo
回退一个变更
回退版本的时候会调用down
函数,需要在函数中对数据表进行更新的逆操作,例如在up
创建表,down
则是删除表
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('users');
}
可以通过 db:migrate:undo:all
回退到初始状态
网友评论