prisma migrate dev 是 Prisma CLI 中用于开发阶段的数据库迁移命令,用于创建并应用迁移。使用时需要影子数据库(shadow database)。
用途
在开发过程中根据 Prisma schema 的变更创建并应用迁移。
主要能力
- 在影子数据库中运行已有迁移,以检测漂移(drift)
- 应用任何待处理的迁移
- 根据 schema 变更生成新的迁移
- 将新迁移应用到开发数据库
- 更新 _prisma_migrations 表
命令与选项
命令形式:prisma migrate dev [options]
选项:
- --name / -n:为迁移命名
- --create-only:创建新迁移但不应用
- --schema:自定义 Prisma schema 路径
- --config:自定义 Prisma 配置文件路径
- --url:覆盖 Prisma 配置文件中的数据源 URL;资料注明该选项在 v7 中已移除
- --skip-generate:需显式运行 prisma generate
- --skip-seed:需显式运行 prisma db seed
使用方式与示例
创建并应用迁移:
prisma migrate dev
若 schema 发生变化,会提示输入迁移名称。
命名迁移:
prisma migrate dev --name add_users_table
仅创建不应用:
prisma migrate dev --create-only
适用于在应用前审查迁移 SQL。
完整工作流(v7):
prisma migrate dev --name my_migration prisma generate # Must run explicitly in v7 prisma db seed # Must run explicitly in v7
迁移文件
生成于 prisma/migrations/ 目录:
prisma/migrations/ ├── 20240115120000_add_users_table/ │ └── migration.sql ├── 20240116090000_add_posts/ │ └── migration.sql └── migration_lock.toml
Schema 漂移检测
如果 migrate dev 检测到漂移(例如手动修改数据库或编辑过迁移文件),会提示重置:
Drift detected: Your database schema is not in sync.
Do you want to reset your database? All data will be lost.
适用场景
- 本地开发
- 新增模型/字段
- 修改关系
- 创建索引
不适用场景
- 生产部署(应使用 migrate deploy)
- CI/CD 流程(应使用 migrate deploy)
- MongoDB(应改用 db push)
常见模式
schema 变更后。示例 schema:
// schema.prisma - Add new field model User { id Int @id @default(autoincrement()) email String @unique name String? createdAt DateTime @default(now()) // New field }
执行:
prisma migrate dev --name add_created_at
处理数据丢失警告。当迁移会导致数据丢失时:
prisma migrate dev --name remove_field
Warning: You are about to delete data...
Accept with: --accept-data-loss
影子数据库
migrate dev 需要影子数据库来检测漂移,可在 prisma.config.ts 中配置:
export default defineConfig({ datasource: { url: env('DATABASE_URL'), shadowDatabaseUrl: env('SHADOW_DATABASE_URL'), }, })
对于本地 Prisma Postgres(prisma dev),影子数据库会自动处理。
限制
资料明确说明:不应在生产部署和 CI/CD 流程中使用(改用 migrate deploy),不适用于 MongoDB(改用 db push)。其他限制暂未提供。