如何修改表(添加字段/删除字段/修改字段)?
- 使用Sequelize-CLI管理数据库的目的是为了监控数据库的变化
- 修改表需要借助 migration 文件修改(这样Sequelize就可以追踪修改过程)
修改步骤
- 通过 migration:generate 创建迁移文件
- 在迁移文件中编写修改的内容
- 通过 db:migrate 执行迁移文件
创建修改表的迁移文件
- 初始化迁移文件和对应的模型文件 npx sequelize model:generate --name User --attributes name:STRING
- 执行迁移文件创建表 npx sequelize db:migrate
- 创建一个迁移文件用来修改表 npx sequelize migration:generate --name change-user
编辑该迁移文件
1 'use strict';
2
3 module.exports = {
4 // 执行迁移文件就会执行up方法
5 up: async (queryInterface, Sequelize) => {
6 // 在Users模型(users表)中添加一个age字段数据类型是int
7 return queryInterface.addColumn('Users', 'age', {
8 type: Sequelize.INTEGER
9 })
10 },
11
12 down: async (queryInterface, Sequelize) => {
13 /**
14 * Add reverting commands here.
15 *
16 * Example:
17 * await queryInterface.dropTable('users');
18 */
19 }
20 };
运行迁移文件
- 运行迁移文件后 会自动执行该迁移文件的 up: async () => { ... } 方法
删除添加的字段
1 'use strict';
2
3 module.exports = {
4 // 执行迁移文件就会执行up方法
5 up: async (queryInterface, Sequelize) => {
6 // 在Users模型(users表)中添加一个age字段数据类型是int
7 return queryInterface.addColumn('Users', 'age', {
8 type: Sequelize.INTEGER
9 })
10 },
11
12 down: async (queryInterface, Sequelize) => {
13 // 删除Users模型(users表)中的age字段
14 return queryInterface.removeColumn('Users', 'age');
15 }
16 };
npx sequelize db:migrate:undo
- 编辑迁移文件中的 down: async() => {...}
- 回退迁移文件会自动执行 down方法