全栈框架数据库迁移操作?

访客 全栈框架 1

本文目录导读:

  1. 核心概念
  2. 后端全栈框架(最典型)
  3. 全栈 TypeScript/JavaScript 框架(后端部分)
  4. 前端全栈框架(带后端能力)
  5. 无框架 / 通用工具

这是一个非常核心的全栈开发问题,数据库迁移(Migration)是现代全栈框架中版本控制数据库结构的标准方式,它允许你像管理代码一样管理数据库的变更。

下面我将主流全栈框架的数据库迁移操作分类说明,涵盖前端全栈和后端全栈框架。

核心概念

无论哪个框架,迁移的核心流程基本一致:

  1. 创建迁移文件:生成一个包含 up(执行)和 down(回滚)方法的文件。
  2. 编写逻辑:在文件中定义字段、索引、表关系等。
  3. 执行迁移:运行命令,将变更应用到数据库。
  4. 回滚迁移:如果出错,用命令撤销最近的一次或多次迁移。
  5. 刷新/重置:删除所有表并重新运行所有迁移(常用于开发环境)。

后端全栈框架(最典型)

这类框架自带全套解决方案,迁移工具是其核心功能。

a. Laravel (PHP) + Eloquent ORM

  • 工具:内置 Schema 门面。

  • 文件位置database/migrations/

  • 创建迁移

    php artisan make:migration create_users_table
  • 编写 up 方法

    // database/migrations/XXXX_create_users_table.php
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamps();
        });
    }
    public function down()
    {
        Schema::dropIfExists('users');
    }
  • 执行迁移

    php artisan migrate
  • 回滚

    php artisan migrate:rollback  # 回滚最近一批
    php artisan migrate:reset     # 回滚全部
    php artisan migrate:refresh   # 回滚并重新迁移(不丢失数据种子)
    php artisan migrate:fresh     # 删除所有表并重新迁移(数据会丢失)

b. Ruby on Rails (Ruby) + ActiveRecord

  • 工具:内置 ActiveRecord::Migration

  • 文件位置db/migrate/

  • 创建迁移

    rails generate migration CreateUsers name:string email:string
  • 自动生成的迁移文件

    # db/migrate/XXXX_create_users.rb
    class CreateUsers < ActiveRecord::Migration[7.0]
      def change
        create_table :users do |t|
          t.string :name
          t.string :email
          t.timestamps
        end
      end
    end
  • 执行迁移

    rails db:migrate
  • 回滚

    rails db:rollback       # 回滚上一步
    rails db:migrate:down VERSION=20230101000000  # 回滚到指定版本
    rails db:migrate:reset  # 回滚并重新迁移

c. Django (Python) + ORM(稍有不同)

  • 概念:Django 使用 makemigrations + migrate 两步操作。

  • 文件位置app_name/migrations/

  • 操作流程

    # 1. 在 models.py 中定义模型
    # 2. 检测模型变更并生成迁移文件
    python manage.py makemigrations
    # 3. 将生成的文件应用到数据库
    python manage.py migrate
  • 查看 SQL

    python manage.py sqlmigrate app_name 0001
  • 回滚:Django 没有直接的 rollback,需要迁移到前一个版本

    python manage.py migrate app_name 0001  # 回滚到编号为 0001 的迁移

全栈 TypeScript/JavaScript 框架(后端部分)

a. NestJS (Node.js)

  • 推荐工具TypeORMPrisma,NestJS 官方推荐 TypeORM。

  • TypeORM 操作

    # 1. 配置数据源(data-source.ts)
    # 2. 生成迁移(基于实体变化自动生成)
    npx typeorm migration:generate src/migrations/CreateUser -d src/data-source.ts
    # 3. 执行迁移
    npx typeorm migration:run -d src/data-source.ts
    # 4. 回滚
    npx typeorm migration:revert -d src/data-source.ts
  • Prisma 操作(更现代、更简单):

    # 1. 定义 schema (schema.prisma)
    # 2. 创建和应用迁移
    npx prisma migrate dev --name add_user_table
    # 3. 部署到生产环境
    npx prisma migrate deploy
    # 4. Prisma 回滚需要手动恢复,推荐使用 `prisma migrate diff`

b. AdonisJS (Node.js)

  • 工具:内置 @adonisjs/lucid ORM。
  • 操作
    # 创建迁移
    node ace make:migration users
    # 执行迁移
    node ace migration:run
    # 回滚
    node ace migration:rollback
    # 刷新
    node ace migration:refresh

前端全栈框架(带后端能力)

a. Next.js (React) + Prisma / Drizzle ORM

  • Prisma 操作:同上,非常流行。

    npx prisma migrate dev --name add_user_table
    npx prisma migrate deploy       # 生产环境
    npx prisma migrate reset        # 开发环境重置
  • Drizzle ORM(新锐,类型安全极佳):

    # 生成迁移(需要配置 drizzle.config.ts)
    npx drizzle-kit generate --name add_users
    # 执行迁移
    npx drizzle-kit migrate
    # Drizzle 的回滚通过 `push` 和 `pull` 管理,或手动修改 SQL 文件

b. Nuxt.js (Vue) + Prisma / Drizzle ORM

  • 与 Next.js 完全一致,使用 Prisma 或 Drizzle 作为 ORM。

c. Remix / SvelteKit

  • 同样,通常搭配 Prisma 或 Drizzle。

无框架 / 通用工具

  • Flyway (Java/JVM):数据库迁移的标准工具,可以集成到任何项目中。
  • Alembic (Python SQLAlchemy):SQLAlchemy 的迁移工具。
  • Knex.js (Node.js):一个 SQL 查询构建器,自带强大的迁移功能。

框架/条件 核心命令 回滚方式 生产环境建议
Laravel php artisan migrate migrate:rollback migrate 即可,不要用 fresh
Rails rails db:migrate db:rollback 使用 db:migrate
Django python manage.py migrate migrate app 0001 使用 migrate
Next.js/NestJS npx prisma migrate dev reset (开发)、migrate diff (生产) migrate deploy
通用原则 创建 -> 写SQL -> 备份 -> 执行 -> 验证 备份优先于回滚 永远不要在 migrate:fresh 上直接跑生产

重要建议

  1. 不要在 migrate:freshrefresh 上直接跑生产环境,这会删除所有表和数据,生产环境只用 migrate
  2. 每次迁移只做一件事:增加一个字段、修改一个索引等,这样更容易排查问题。
  3. 生产环境回滚前,先备份数据库,因为有些迁移(如删除列)一旦提交,数据就彻底没了。
  4. 迁移文件应该纳入版本控制(Git),就像普通代码一样。
  5. 创建迁移时,最好提供 down 方法(或自动生成),确保可以安全回滚。

如果你能告诉我你具体使用的是哪个框架(Next.js + Prisma 还是 Laravel),我可以给你更详细、更具体的命令和示例。

标签: 全栈框架

抱歉,评论功能暂时关闭!