📜  sequelize 迁移框架 - Javascript (1)

📅  最后修改于: 2023-12-03 15:20:06.138000             🧑  作者: Mango

Sequelize 迁移框架 - Javascript

Sequelize 是一个基于 Node.js 的 ORM (Object-Relation Mapping) 框架,在数据库操作中,ORM 框架可以用来定义数据表,字段以及字段的数据类型等。

Sequelize 提供了迁移 (Migration) 框架来方便地管理数据库结构的变化。通过迁移,我们可以更好地保证数据库的版本控制,可以快速地回滚到之前的版本,并且不会丢失任何数据。

安装

在 Node.js 项目中,可以使用 npm 包管理器来安装 sequelizesequelize-cli

npm install --save sequelize

npm install --save-dev sequelize-cli
使用
初始化

首先,我们需要使用 sequelize-cli 初始化一个项目:

npx sequelize-cli init

这将创建一个目录结构,其中包含了用于管理数据库结构的 migrationsseeders 目录,以及 config 目录。

config/config.json 文件中,我们可以配置数据库连接信息。

{
  "development": {
    "username": "root",
    "password": null,
    "database": "database_name",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }
}
创建迁移

migrations 目录下,创建一个新迁移。

npx sequelize-cli migration:generate --name create_users_table

这将在 migrations 目录下生成一个新的迁移文件。

我们可以编辑迁移文件,定义需要创建的表结构。

'use strict';

module.exports = {
  up: async (queryInterface, Sequelize) => {
    await queryInterface.createTable('Users', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      name: {
        type: Sequelize.STRING
      },
      age: {
        type: Sequelize.INTEGER
      },
      email: {
        type: Sequelize.STRING,
        unique: true
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });
  },

  down: async (queryInterface, Sequelize) => {
    await queryInterface.dropTable('Users');
  }
};

up 方法中,我们定义了需要创建的表结构。在 down 方法中,我们定义了回滚操作。

运行迁移

我们可以使用以下命令来运行迁移,并更新数据库结构。

npx sequelize-cli db:migrate
回滚迁移

如果需要回滚迁移,可以使用以下命令。

npx sequelize-cli db:migrate:undo

这将回滚最近一次迁移。

如果需要回滚所有迁移,可以使用以下命令。

npx sequelize-cli db:migrate:undo:all
总结

通过 Sequelize 迁移框架,我们可以更好地管理数据库结构的变化,并且不会丢失任何数据。

在创建迁移时,我们可以定义需要创建的表结构,在运行迁移时,Sequelize 会自动为我们创建数据库表。回滚迁移时,Sequelize 会自动删除数据库表。

使用 Sequelize 迁移框架,我们可以更加高效地进行开发,同时提高代码质量,降低维护成本。