一、数据库迁移工具-使用
1.什么是Sequelize-CLI?
- 在编程开发中为了能够更好的管理代码, 我们可以使用Git来管理我们的代码,
实现对代码变更的追踪, 实现在各个不同版本之间切换 - 在数据库开发中为了能够更好的管理数据库, 我们也可以使用数据库迁移工具来管理我们的数据库,
实现对数据库变更的追踪, 实现在各个不同版本之间切换 - Sequelize-CLI就是一款数据库迁移工具, 能够让我们追踪数据库的变更, 在各个不同版本之间随意切换
2.如何使用Sequelize-CLI?
2.1) 安装sequelize-cli。
npm i sequelize sequelize-cli mysql2 -s
需要提前安装mysql2,sequelize。因为sequelize-cli依赖于sequelize,sequelize依赖于mysql2。
2.2) 查看常用指令
npx sequelize-cli
2.2) 初始化Sequelize-CLI
npx sequelize-cli init
- config: 数据库配置文件, 用于告诉CLI如何连接数据库。
在项目开发的不同阶段,根据不同配置创建不同数据库。因为项目开发的时候不会操作上线之后的服务器,因为访问外网效率慢,并且直接操作服务器有潜在的风险。
- models: 数据库模型文件, 用于告诉CLI如何创建表
- migrations[迁移]: 数据库迁移文件, 用于记录数据库不同版本变更
- seeders: 数据库种子文件, 用于编写测试数据
2.3) 链接数据库,说明当前是什么阶段[根据config文件中的配置项]
set NODE_ENV=development
2.4) 根据config配置创建数据库
npx sequelize db:create
二、数据库迁移工具-创建表
1.创建模型
npx sequelize model:generate –name xxx –attributes key:type
生成对应的模型文件和迁移文件
- name:指定表的名称
- attributes:指定表的字段
npx sequelize model:generate --name User --attributes name:STRING
2.根据模型创建表
npx sequelize db:migrate
再另外创建一个Book的表:
npx sequelize model:generate --name Book --attributes name:STRING npx sequelize db:migrate
3.回退到某个时刻
三、数据库迁移工具-修改表
https://sequelize.org/master/class/lib/dialects/abstract/query-interface.js~QueryInterface.html
1.如何修改表?
- 使用Sequelize-CLI管理数据库的目的就是为了监控数据库的变化
- 所以我们不能直接修改表的结构, 如果要修改, 必须通过migration文件修改。这样我们就能记录修改操作, 就能追踪修改过程, 就能回退到指定版本
2.修改表步骤
- 2.1 通过 migration:generate 创建迁移文件
- 2.2 在迁移文件中编写修改的内容
- 2.3 通过 db:migrate 执行编写好的迁移文件
3.实例:给User表添加age字段并删除:
1.创建迁移文件
npx sequelize migration:generate --name change-user
- up:执行迁移文件时执行
- down:撤销操作时执行
2.app.js文件中编写修改执行代码
return queryInterface.addColumn('User', 'age', { type: Sequelize.INTEGER })
3.执行编写好的迁移文件
npx sequelize db:migrate
4.app.js文件中编写删除字段代码
return queryInterface.removeColumn('Users', 'age')
5.执行回退,用以删除
npx sequelize db:migrate:undo
四、数据库迁移工具-种子文件
0.什么是种子文件?
- Sequelize-CLI中的种子文件是专门用于编写测试数据的
- 在Sequelize-CLI中不同的阶段[开发、测试、上线数据库]会根据config.json配置文件创建不同的数据库。但是刚创建出来的数据库是没有数据的, 所以为了方便我们在不同的阶段演示和调试。可以在种子文件中提前编写测试数据, 以便于我们在不同的阶段中使用
1.创建种子文件
npx sequelize seed:generate –name xxx
npx sequelize seed:generate --name user
执行结果:在seeders文件夹中生成了一个日期-name.js的文件夹
- 其中up方法:向指定列表中插入数据
up: async (queryInterface, Sequelize) => { /* bulkInsert:指定表中插入指定数据 * */ await queryInterface.bulkInsert('Users', [{ name: 'John Doe', }, { name: 'John gege', }, { name: 'John ww', }], {}); }, - 其中down方法:向指定列表中撤销数据
2.执行种子文件
npx sequelize db:seed –seed=[fileName, …]; // 执行指定文件
npx sequelize db:seed:all // 执行所有种子文件
npx sequelize db:seed --seed 337-user.js
注意点:默认情况下,指定种子文件【https://sequelize.org/master/manual/migrations.html#seed-storage】的操作不会在数据库中像迁移文件【https://sequelize.org/master/manual/migrations.html#migration-storage】一样被保存
3.记录种子文件操作记录
在配置文件【config.json】中。将想要保存种子文件的某个阶段添加seederStorage属性
"seederStorage": "sequelize" // 将种子文件操作记录到数据库中
注意点:修改了配置文件,应该重新创建数据库和表
npx sequelize db:create // 重新创建数据库 npx sequelize db:migrate // 重新创建表 npx sequelize db:seed --seed 337-user.js // 执行种子文件
4.回退到某个时刻
npx sequelize seed:generate --name book // 1.创建种子文件 // 2.打开seeders文件夹中的种子文件731-book.js,up方法中编写插入数据的代码 npx sequelize db:seed --seed 731-book.js // 3.执行种子文件 // 4.打开seeders文件夹中的种子文件731-book.js,down方法中编写删除数据的代码 npx sequelize db:seed:undo --seed 731-book.js // 5.撤销执行过的种子文件
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178437.html原文链接:https://javaforall.net
