场景

开发过程中需求对原有的服务器后台的数据库部分进行prisma的重构,并且增加一张新表,因而需求确保数据库中的数据完美搬迁到prisma

过程

1. 依据数据库生成Schema界说

Prisma,我仅仅更新一下表结构,你为什么要重置我的数据库!?
终端履行:

pnpm prisma db pull

履行结果:

Prisma,我仅仅更新一下表结构,你为什么要重置我的数据库!?
依据数据库生成了对应的Schema

2. 新增一张表或许修正表结构履行搬迁指令

Prisma,我仅仅更新一下表结构,你为什么要重置我的数据库!?
履行搬迁指令

pnpm prisma migrate dev

得到prisma正告,从提示能够看出,数据库的schema与搬迁前史不共同,需求重置整个数据库,一切的数据都将丢失。

Prisma,我仅仅更新一下表结构,你为什么要重置我的数据库!?

3. 分析问题

首先需求知道prisma做出需求重置数据库的判别的依据是什么,明显经过prisma db pull 生成的schema是和数据库的结构共同的,因而问题不在这里。 问题出在了migration history上,咱们能够从官方文档上找到答案。

Prisma,我仅仅更新一下表结构,你为什么要重置我的数据库!?
从第四点能够看出,prisma migrate dev是经过_prisma_migrations表中的数据来判别是否需求重置数据表的。

知道了这一点,解决方法就有了。

4. 解决问题

找到了问题的原因,只需求手动创立一条搬迁前史就能够解决这个问题。

  1. 在prisma目录下创立migrations/initial/migration.sql文件。
    Prisma,我仅仅更新一下表结构,你为什么要重置我的数据库!?
  2. 经过mysql图形化东西,将创立表结构的sql语句导入到这个文件中(我这里用的是mtysql官方的东西workbench)
    Prisma,我仅仅更新一下表结构,你为什么要重置我的数据库!?
    Prisma,我仅仅更新一下表结构,你为什么要重置我的数据库!?
  3. 经过prisma migrate resolve指令使用这条记录,使其收效(其实便是将他存到_prisma_migrations表中)
pnpm prisma migrate resolve --applied initial

Prisma,我仅仅更新一下表结构,你为什么要重置我的数据库!?
Prisma,我仅仅更新一下表结构,你为什么要重置我的数据库!?

  1. 这个时候,咱们在履行搬迁指令prisma migrate dev就能够实现完美搬迁了(--skip-generate是为了演示的时候越过生成prisma/client的过程,正常情况下不需求加)
    Prisma,我仅仅更新一下表结构,你为什么要重置我的数据库!?