前言
在开发过程中,频繁地进行数据库架构的改变是一件很常见的事情。而如何高效地保证数据库迁移的正确性,成为团队协作的一个重要问题。
本文将介绍 Sequelize 中的数据迁移技巧,包含快速上手指南和最佳实践,帮助读者提升迁移数据的能力,减少迁移出错的概率。
快速上手 Sequelize 迁移库
Sequelize 是一个基于 Promise 的 Node.js ORM。它支持 MySQL、PostgreSQL、SQLite、Microsoft SQL Server 等多种数据存储方式,便于应用程序开发者进行数据操作。
以下是快速上手 Sequelize 迁移库的步骤:
步骤一:安装 Sequelize 和 CLI
在项目中安装 sequelize 和 sequelize-cli 两个库:
npm install --save sequelize npm install --save-dev sequelize-cli
步骤二:初始化迁移库
在项目中创建迁移库:
npx sequelize-cli init
执行后会在项目中创建迁移需要的文件夹和文件:config、migrations、models、seeders。
步骤三:生成数据库表迁移文件
在项目中创建迁移文件:
npx sequelize-cli migration:generate --name create_table_name
执行后会在 migrations 文件夹中创建一个新的迁移文件。打开文件,添加需要迁移的表结构信息。
-- -------------------- ---- ------- -------------- - - --- ---------------- ---------- -- - ------ ---------------------------------------- - --- - ---------- ------ -------------- ----- ----------- ----- ----- ----------------- -- ----- - ----- ---------------- -- ------------ - ----- -------------- -- ----------- - ---------- ------ ----- -------------- -- ----------- - ---------- ------ ----- -------------- - --- -- ----- ---------------- ---------- -- - ------ --------------------------------------- - --
步骤四:执行数据库表迁移
在项目中执行数据库表迁移操作:
npx sequelize-cli db:migrate
如果需要撤回迁移,执行:
npx sequelize-cli db:migrate:undo
以上即是快速上手 Sequelize 迁移库的所有步骤。
Sequelize 数据迁移库最佳实践
使用 timestamps 实现自动追踪表的创建和更新时间
Sequelize 提供 timestamps 选项来自动维护表的创建时间和更新时间。在创建表时增加 timestamps: true 即可实现该功能。
-- -------------------- ---- ------- -------------- - - --- ---------------- ---------- -- - ------ ---------------------------------------- - --- - ---------- ------ -------------- ----- ----------- ----- ----- ----------------- -- ----- - ----- ---------------- -- ------------ - ----- -------------- -- ----------- - ---------- ------ ----- --------------- ------------- -------------------------------------- -- ----------- - ---------- ------ ----- --------------- ------------- ------------------------------------ -- ------ ------------------- - -- - ----------- ---- --- -- ----- ---------------- ---------- -- - ------ --------------------------------------- - --
使用 Sequelize CLI 完成多个迁移文件的顺序控制
Sequelize CLI 支持多个迁移文件的顺序控制。在多个迁移文件中,Sequelize 会按照文件名进行顺序控制。文件名以 “YYYYMMDDHHMMSS” 开头,例如:“20200101010101-create-user.js”。对于相同的时间戳,Sequelize 将按照字母顺序进行排序。
比如要创建 users 表和 articles 表,可以采用类似以下的文件名:
20202010101010-create-users.js 20202010101011-create-articles.js
执行迁移时会按照创建时间对文件进行排序,确保按照用户表和文章表的创建顺序进行迁移。
避免在迁移文件中写入硬编码值
在迁移文件中,写入的硬编码值可能导致未来的迁移失败。因此,建议使用 Sequelize 提供的数据类型常量,例如:Sequelize.STRING、Sequelize.DATE 等。同时,注意写入的值必须符合数据库的要求,比如在使用 Sequelize.INTEGER 时必须设置 allowNull 为 false 或 true。
使用常量的值时,也应该将它们从 config 文件或环境变量中导入。这样,在之后的下游环境中,在此配置文件或变量中的设置将用于正确的部署和更改数据库。
将添加表和表字段的操作与删除表和表字段的操作放在一起
在每个迁移文件中,应该考虑将添加一张表的操作与删除它放在一起。同样,应该将添加字段的操作与删除它放在一起。
这样,当迁移失败时,可以使用回滚操作来还原迁移。否则,您可能需要手动清理并恢复损坏的表和字段,这将是非常困难的。
使用事务保证迁移操作的完整性
当添加或删除多张表时,可能会在某一张表成功创建后,由于某些原因失败,导致整个迁移操作失败。如果没有适当的事务管理机制,就会导致出现非常严重的问题。
Sequelize 为我们提供了事务管理机制。使用 queryInterface.transaction() 将相同的 queryInterface 对象方法视为一个事务:
-- -------------------- ---- ------- -------------- - - --- ---------------- ---------- -- - ------ ---------------------------------------- -- - ------ ------------------------------------ - -- --- -- - ------------ - ---------- -- - ------ ------------------------------------ - -- --- -- - ------------ - -- ---------- -- - -- --- --- --- -- ----- ---------------- ---------- -- - ------ ---------------------------------------- -- - ------ ---------------------------------- - ------------ - ---------- -- - ------ ---------------------------------- - ------------ - -- ---------- -- - -- --- --- --- - --
重命名列时先添加新列,再删除旧列
对于要重命名一个字段的操作,可以在添加一个新列时进行,然后在确认细节和数据正常后,将旧列从表中删除。
此外,重命名列时应该明确指定现在使用的 Sequelize 数据类型,以便迁移文件保持一致,以便更好地可读。
-- -------------------- ---- ------- -------------- - - --- ---------------- ---------- -- - ------ ------------- -------------------------------------- ------------- - ----- ---------------- --- -------------------------------------- ---------- --- ---------- - ------------- ----------------------------------------- ------------- --- -- ----- ---------------- ---------- -- - ------ ------------- -------------------------------------- ------------- - ----- ----------------- --- -------------------------------------- ---------- --- ---------- - ------------- ----------------------------------------- ------------- --- - --
总结
本文基于 Sequelize,介绍了数据迁移库的基本操作和最佳实践,以及事务、顺序等概念。希望这些技巧和学习经验能够为读者提供实用指南,帮助团队在数据库架构改变时更好地协作,减少出错。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6456257a968c7c53b096729d