Prisma 迁移介绍
流程
Prisma 会在 你的数据库中新建一个表.这个表存的就是你的迁移文件.每次你运行 prisma migrate dev
或者 prisma migrate deploy
的时候,Prisma 都会检查你的迁移文件和数据库中的迁移表,然后对比出差异,然后执行迁移.
注意
写模型
推送数据库本地保存 sql
生成本地 client
举例
(1) 写模型
- 模型
ts
generator client {
provider = "prisma-client-js"
output = "../generated/prisma"
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
model user {
id Int @id @default(autoincrement())
name String?
password String? @db.VarChar(64)
}
(2) 推送数据库本地保存 sql
- 代码 init 可以随意写
ts
npx prisma migrate dev --name init
这个操作会将 prisma 结构同步到数据库当中,并且创建一个 migrations 记录
bash
migrations/
└─ 20241122022542_init/
└─ migration.sql
默认的 migrations
记录都是以时间开头 + 下划线 + 名称。
这里面的migration.sql
内容就是修改数据库使用的 SQL 语句:
sql
-- CreateTable
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255),
password VARCHAR(64)
);
(3) 生成本地 client
ts
npx prisma generate
(4) 查询即可
继续修改数据库
(1) 更改模型
现在我们更新模型新增加一个用户创建时间字段
ts
model user {
id Int @id @default(autoincrement())
name String?
password String? @db.VarChar(64)
createdAt DateTime @default(now())// 新增加的
}
(2) 推送数据库本地保存 sql
ts
npx prisma migrate dev --name add-createdAt
这个操作会将 prisma 结构同步到数据库当中,并且创建一个 migrations 记录
bash
migrations/
└─ 20241122022542_init/
└─ migration.sql
└─ 20241122022542_add-createdAt/
└─ migration.sql
这里面的migration.sql
内容就是修改数据库使用的 SQL 语句:
sql
ALTER TABLE `user` ADD COLUMN `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3);
(3) 生成本地 client
ts
npx prisma generate
(4) 查询即可
部署(无迁移记录)
直接同步
- 推送
ts
npx prisma db push
这样会将现有的数据库直接重置
- 拉取
ts
npx prisma db pull --force
拉取后一定要用npx prisma generate
重新生成客户端
但是这两个命令都没有办法管理迁移历史,只是直接将 Prisma 结构同步到数据库(或将数据库同步到 Prisma 结构)当中。
这两个命令适用于项目创建的时候,或需要覆盖的时候。
部署(有迁移记录)
生成记录
每一次修改表结构.推送.然后生成本地客户端.这样就可以生成迁移记录
ts
npx prisma migrate dev --name 你自己起的名字
第二种
已经有了所有的迁移记录
即 migrations/许多文件夹/保存记录
直接运行
ts
npx prisma migrate deploy
这个命令会将所有的迁移记录同步到数据库当中