Prisma 101
概念
是一个ORM(Object relational mappers,对象关系映射),提供一个类型安全的API提交数据库查询
安装
pnpm i prisma -D
pnpm exec prisma
pnpm i @prisma/client
模型定义
model ModelName {
fieldName fieldType [type modifiers] [attributes]
}
ModelName: 模型名称,对应数据库中的表名
fieldName: 字段名,对应数据库中的列名
fileType: 字段类型
type modifiers: 类型修饰,可选,比如是否选填,是否外键
attributes:属性,可选,比如是否唯一,默认值,是否自增
关系确定
通过@relation属性来定义
一对一、一对多、多对多、自引用
model ModelName {
fieldName fieldType @relation(fields:[fieldName], references:[id])
}
通过@map重命名字段
CRUD
create: 创建单个记录
createMany:创建多个记录
findUnique:查询单个记录
findMany:查询多条记录
findFirst:获取第一条匹配的记录
select:嵌套查询或者返回特定字段
update:更新单条记录
updateMany:更新多条记录
upsert:更新或创建记录
delete:删除单条记录
deleteMany:删除多条记录
关系过滤器:none、every、some、is、isNot
where:过滤
orderBy:排序
mode: 'insensitive':不区分大小写
$use:添加中间件
aggregate:聚合
groupBy:分组
count:计数
$transaction:一系列读写操作,这些操作被视为一个整体,要么都成功,要么都失败
发送原始SQL:$queryRaw、$executeRaw
prisma migrate
使数据库架构与prisma schema同步
维护数据库中的现有数据
pnpm exec prisma migrate dev —name [name],仅适用于开发环境
pnpm exec prisma migrate deploy,适用于生产环境
pnpm exec prisma db push,初始化或不担心数据丢失,可以用
pnpm exec prisma db pull, 将数据库的结构同步到prisma schema
支持的数据库
PostgreSQL
postgresql://USER:PASSWORD@HOST:PORT/DATABASE
MySQL
mysql://USER:PASSWORD@HOST:PORT/DATABASE
SQLLite
file:[path]/dev.db
MongoDB
mongodb://USERNAME:PASSWORD@HOST/DATABASE
QA
为什么执行prisma migrate dev,会删除所有表中的数据
pnpm run generate:postgres:dev(prisma generate):同步数据库结构
pnpm run push:postgres:dev(prisma db push):根据schema创建数据库及表结构
pnpm run migrate:postgres:dev(prisma migrate dev):将本地改动的表结构同步到开发数据库
执行步骤必须按这个顺序来,否则每次prisma migrate dev的时候,会把开发数据库的表数据清空,遇到如下提示