Prisma,我只是更新一下表结构,你为什么要重置我的数据库!?
内容提要
在场景开发过程中,通过prisma重构服务器后台的数据库部分,并增加新表。使用Schema定义和搬迁指令实现数据搬迁,但需要手动创建一条搬迁记录解决migration history问题。通过prisma migrate dev指令实现完美搬迁。
延伸解读
迁移历史不一致的根源
Prisma Migrate 通过 _prisma_migrations 表判断迁移状态。当使用 db pull 生成 Schema 后,该表可能为空或与当前结构不匹配,导致 migrate dev 认为需要重置数据库。理解这一点是避免数据丢失的关键。
手动创建迁移记录的方法
在 prisma/migrations 下创建 initial 目录并生成 migration.sql,内容为当前数据库的建表 SQL。然后运行 prisma migrate resolve --applied initial,将这条记录写入 _prisma_migrations 表,使迁移历史与数据库结构同步。
操作注意事项与风险
手动创建迁移记录时,必须确保 SQL 与数据库实际结构完全一致,否则后续迁移可能出错。此方法适用于已有数据库首次接入 Prisma 的场景,但操作前建议备份数据,避免因误操作导致数据丢失。
Q&A
如何使用Prisma重构数据库?
可以通过执行pnpm prisma db pull命令生成数据库对应的Schema,然后使用pnpm prisma migrate dev命令进行迁移。
为什么在执行迁移时会提示需要重置数据库?
提示需要重置数据库是因为数据库的schema与迁移历史不一致,Prisma通过_prisma_migrations表的数据来判断这一点。
如何解决Prisma迁移历史不一致的问题?
可以手动创建一条迁移历史记录,并将其导入到_prisma_migrations表中,使用pnpm prisma migrate resolve命令应用这条记录。
在Prisma中如何创建新的表?
在生成的Schema中新增表的定义后,执行迁移指令pnpm prisma migrate dev即可。
使用Prisma进行数据库迁移时需要注意什么?
需要确保数据库的Schema与迁移历史一致,否则可能会导致需要重置数据库。
如何导入SQL语句到Prisma的迁移文件中?
可以使用mysql图形化工具将创建表结构的SQL语句导入到migrations/initial/migration.sql文件中。