在使用 Sequelize 链接数据库并定义数据模型后,我们难免遇到修改表结构的情况,例如新增字段、更改字段类型等。 Sequelize 提供了方便的数据迁移工具支持这种表结构变更,本文将详细介绍 Sequelize 数据迁移的使用。
环境准备
在开始使用 Sequelize 数据迁移前,需要先安装 sequelize-cli 工具:
npm install --save-dev sequelize-cli
安装完成后,我们需要在项目根目录中执行如下命令来初始化 Sequelize 项目:
npx sequelize-cli init
初始化完成后,我们会看到生成了 config、migrations、models、seeders 四个目录。
- config:存放配置文件,包含数据库连接信息等;
- migrations:存放数据迁移文件,可用于管理表结构的变更;
- models:存放数据模型文件,每个模型对应一个表;
- seeders:存放测试数据文件。
在 config/config.json 中配置好数据库连接信息后,我们可以定义一个 User 模型,并使用 sequelize-cli 生成 migration 文件:
npx sequelize-cli model:generate --name User --attributes name:string,email:string
这将在 models 目录中生成一个 User 模型文件,以及在 migrations 目录中生成一个新的 migration 文件。我们可以在 migration 文件中定义 User 表的初始结构:
-- -------------------- ---- ------- ---- -------- -------------- - - --- ----- ---------------- ---------- -- - ----- ----------------------------------- - --- - ---------- ------ -------------- ----- ----------- ----- ----- ----------------- -- ----- - ----- ---------------- -- ------ - ----- ---------------- -- ---------- - ---------- ------ ----- -------------- -- ---------- - ---------- ------ ----- -------------- - --- -- ----- ----- ---------------- ---------- -- - ----- ---------------------------------- - --
其中,up 函数表示对应的升级操作,down 函数表示对应的降级操作。在该文件中定义了 id、name、email、createdAt、updatedAt 五个字段。createdAt 和 updatedAt 是 Sequelize 自动生成的,用于记录数据创建和修改的时间。注意,该文件中并未包含主键和索引定义,因为 Sequelize 默认会为这些字段自动创建。
我们可以使用如下命令运行该 migration 文件:
npx sequelize-cli db:migrate --env development
运行该命令后,Sequelize 会在数据库中自动创建 User 表,并且包含 id、name、email、createdAt、updatedAt 五个字段。
数据迁移操作
下面我们介绍一些常用的数据迁移操作:
新增字段
我们可以使用如下命令生成一个名为 add_phone_to_user 的 migration 文件,用于为 User 表新增 phone 字段:
npx sequelize-cli migration:generate --name add_phone_to_user
文件的内容如下:
-- -------------------- ---- ------- ---- -------- -------------- - - --- ----- ---------------- ---------- -- - ----- --------------------------------- -------- - ----- ---------------- --- -- ----- ----- ---------------- ---------- -- - ----- ------------------------------------ --------- - --
其中,up 函数中定义了添加 phone 字段的操作,down 函数中定义了删除 phone 字段的操作。我们可以使用如下命令运行该文件,完成迁移操作:
npx sequelize-cli db:migrate --env development
在这里需要注意,在 up 函数中定义的操作,只能执行一次,因此如果我们想要修改该字段的类型,需要使用下面介绍的修改字段类型操作。
修改字段类型
在运行了上一步的新增字段操作后,我们发现字段类型有误,需要将 phone 字段的类型从 STRING 修改为 INTEGER。我们可以使用如下命令生成一个名为 modify_phone_type 的 migration 文件,用于修改 User 表的 phone 字段类型:
npx sequelize-cli migration:generate --name modify_phone_type
文件的内容如下:
-- -------------------- ---- ------- ---- -------- -------------- - - --- ----- ---------------- ---------- -- - ----- ------------------------------------ -------- - ----- ----------------- --- -- ----- ----- ---------------- ---------- -- - ----- ------------------------------------ -------- - ----- ---------------- --- - --
其中,up 函数中定义了将 phone 字段的类型修改为 INTEGER 的操作,down 函数中定义了将 phone 字段的类型修改回 STRING 的操作。
需要注意的是,在 MySQL 中,如果我们要将一个字段的类型从 VARCHAR 改为 INT 这样的类型,那么在 up 函数执行的过程中,Sequelize 会自动将该字段的数据类型修改为 INT,并将原有的字符串转换为相应的数字。但是,在 down 函数执行的过程中,Sequelize 会自动将该字段的数据类型改回 VARCHAR,而对象中存储的数字则会转换为字符串。因此,我们在 down 函数中需要对数据类型进行检查,以便正确地将字符串转换回数字,否则可能会引发错误。
我们可以使用如下命令运行该文件,完成迁移操作:
npx sequelize-cli db:migrate --env development
修改字段名
在运行了上一步的修改字段类型操作后,我们发现字段名也有误,需要将字段名 phone 修改为 mobile。我们可以使用如下命令生成一个名为 modify_phone_name 的 migration 文件,用于修改 User 表的字段名:
npx sequelize-cli migration:generate --name modify_phone_name
文件的内容如下:
-- -------------------- ---- ------- ---- -------- -------------- - - --- ----- ---------------- ---------- -- - ----- ------------------------------------ -------- ---------- -- ----- ----- ---------------- ---------- -- - ----- ------------------------------------ --------- --------- - --
其中,up 函数中定义了将 phone 字段名修改为 mobile 的操作,down 函数中定义了将 mobile 字段名修改回 phone 的操作。我们可以使用如下命令运行该文件,完成迁移操作:
npx sequelize-cli db:migrate --env development
删除字段
当我们需要删除 User 表中的某个字段时,可以使用如下命令生成一个名为 remove_phone_from_user 的 migration 文件:
npx sequelize-cli migration:generate --name remove_phone_from_user
文件的内容如下:
-- -------------------- ---- ------- ---- -------- -------------- - - --- ----- ---------------- ---------- -- - ----- ------------------------------------ ---------- -- ----- ----- ---------------- ---------- -- - ----- --------------------------------- --------- - ----- ---------------- --- - --
其中,up 函数中定义了删除 mobile 字段的操作,down 函数中定义了添加 mobile 字段的操作。我们可以使用如下命令运行该文件,完成迁移操作:
npx sequelize-cli db:migrate --env development
结语
本文介绍了 Sequelize 的数据迁移操作,包括新增字段、修改字段类型、修改字段名、删除字段等常用操作。在实际项目中,尤其是在多人协作开发中,使用数据迁移工具能够更好地管理表结构的变更,避免手动修改出现错误。使用 Sequelize 的数据迁移工具,只需要编写相应的 migration 文件,并使用 sequelize-cli 工具运行相关命令,即可完成表结构变更的操作。希望本文能够为前端开发者提供一些借鉴和指导。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6782d2ac935627c9001e709b