编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

基于Node.jsORM框架Sequelize的数据库迁移2

wxchong 2024-06-19 22:19:08 开源技术 13 ℃ 0 评论


构建数据库表结构

有了数据库,下面就需要在数据库中创建我们应用所需要用到的各种表以及表结构(字段)。这个时候就轮到前面提到的迁移脚本上场了!

我们以一个用户表(User)为例,我们需要记录用户的如下几个信息

? 用户名

? 密码

? 创建时间

创建迁移脚本 - User

一般情况下,我们会每一张表定义一个迁移文件,我们可以通过下面的命令来完成

npx sequelize-cli migration:create --name User

它会在 migrations 目录下自动创建一个时间-表名.js 的脚本文件

脚本解析

脚本其实就是一个 Node.js 代码,提供给 sequelize-cli 进行读取执行,每一个脚本通过 module.exports 导出一个包含了 down 和 up 方法的对象

? up:执行迁移命令(db:migrate)的时候调用

? down:执行撤销/回滚命令(db:migrate:undo/db:migrate:undo:all)的时候调用

在看具体的代码之前,先来了解一下 Sequelize 提供的对象和类

queryInterface

Sequelize 提供了一个 queryInterface 对象,该对象下又提供了许多操作数据库结构的各种方法(DDL),如:创建表、字段、索引等

Sequelize

Sequelize 的核心类,提供了一些数据库相关的常量信息,比如数据类型,也可以进行实例化,用于对数据库中的数据进行操作(DQL、DML)

脚本

在 up 方法中,我们主要编写的创建表结构,或者新增修改表结构的相关代码。down 方法中,本质就是 up 方法的一个反向操作。

下面就是一个用户构建以及销毁 user 表的相关代码

'use strict';


module.exports = {

up: (queryInterface, Sequelize) => {

/*

Add altering commands here.

Return a promise to correctly handle asynchronicity.


Example:

return queryInterface.createTable('users', { id: Sequelize.INTEGER });

*/

/*

createTable 方法用于创建表

- 第一个参数是要创建的表的名称

- 第二个参数是一个对象,用来描述表中包含的字段信息

*/

return queryInterface.createTable('user', {

id: {

// 字段类型:数字

type: Sequelize.INTEGER,

// 设置为主键

primaryKey: true,

// 自动增长

autoIncrement: true

},

name: {

// 字符串类型(20长度)

type: Sequelize.STRING(20),

// 值唯一

unique: true,

// 不允许 null 值

allowNull: false

},

password: {

// 字符串类型(32长度)

type: Sequelize.STRING(32),

// 不允许 null 值

allowNull: false

},

createdAt: {

// 日期类型

type: Sequelize.DATE,

// 不允许 null 值

allowNull: false

}

});

},


down: (queryInterface, Sequelize) => {

/*

Add reverting commands here.

Return a promise to correctly handle asynchronicity.


Example:

return queryInterface.dropTable('users');

*/

// 删除 user 表

return queryInterface.dropTable('user');

}

};

执行迁移脚本

有了 migrations 脚本,我们再通过 db:migrate 命令执行脚本

npx sequelize-cli db:migrate

命令执行成功以后,我们就可以在数据库中看到对应的表以及字段信息了;

我们需要的表创建成功了,但是大家也会发现在我们的数据库中会有一个叫做 SequelizeMeta 的表,这个表是干嘛的呢?其实,它是用来记录我们已经执行过的迁移脚本的。当我们执行迁移命令的时候,它就会把当前执行的迁移脚本记录到该表中,下次执行迁移命令的时候就不会重复的去执行已经执行过的迁移脚本了。

更新表

许多时候,因为项目需求的变更,数据库也需要修改更新。比如,当用户修改信息的时候,我们希望记录下来最后一次修改更新的时间,也就是需要给 user 表新增一个 updatedAt 字段。无需废话,上:

添加一个新的迁移脚本

npx sequelize-cli migration:create --name User-AddUpdatedAt

脚本

module.exports = {

up: (queryInterface, Sequelize) => {

// 给 user 表添加列(字段):updateAt

return queryInterface.addColumn('user', 'updatedAt', {

type: Sequelize.DATE,

allowNull: false

})

},

down: (queryInterface, Sequelize) => {

// 删除 user 表的 updatedAt 列(字段)

return queryInterface.removeColumn('user', 'updatedAt');

}

};

再次执行命令

npx sequelize-cli db:migrate

成功以后,数据库中的 user 表中,就会多出一个新的字段:updatedAt

撤销/回滚

我们还可以通过 db:undo 命令来执行撤销/回滚脚本,其实也就是执行对应脚本中的 down 方法

单次撤销(最近的一次)

npx sequelize-cli db:migrate:undo

撤销所有

npx sequelize-cli db:migrate:all

小结

在这篇文章中,我们主要了解在项目数据库开发迭代过程中,如果使用迁移工具帮助我们更好的自动的去完成数据库中维护管理更新等问题,包含了

? 什么是迁移

? 脚本的编写

? 如何更新迭代

? 如何撤销回滚

等知识点,希望能给大家带来帮助!

以上是酷仔今日整理的“基于Node.jsORM框架Sequelize的数据库迁移2”一文,希望为正在学习Web前端的同学提供参考。本文分为两篇进行发布,“基于Node.jsORM框架Sequelize的数据库迁移1”为上半部分Web前端知识点,可连起来进行阅读学习。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表