这部分最容易被讲偏。
#Prisma 不是“取代 SQL 常识”
如果你不会:
- 主键 / 外键
- 索引
- 事务隔离
- join
- 约束
- 查询代价
那 Prisma 不会把这些工程事实变没。
它只是把大部分高频数据操作变得更清晰、更安全。
#Prisma 也不是“绝不写 SQL”
当你遇到这些场景时,原生 SQL 很正常:
- 特别复杂的报表查询
- 数据库特性非常专有
- 需要极致手工优化
- Prisma Client 暂时没有直接表达能力
这时你仍然可以下沉:
const rows = await prisma.$queryRaw`
SELECT id, title
FROM "Post"
WHERE published = true
ORDER BY "createdAt" DESC
`;写入类原生 SQL 也可以:
const count = await prisma.$executeRaw`
UPDATE "Post"
SET published = true
WHERE published = false
`;#所以更实际的团队打法往往是
80% 常规 CRUD / 关系查询 / 事务
-> Prisma Client
20% 特殊查询 / 专用优化 / 数据库特性
-> Raw SQL#Prisma 和传统 ORM 的关系
你可以这样粗暴但很准地理解:
| 工具心智 | 更像什么 |
|---|---|
| 原生 SQL | 你亲自去档案馆窗口讲官方语言 |
| 传统 ORM | 经纪人替你处理对象与表的映射 |
| Prisma | 一家有章程、有翻译官、有迁移档案的现代事务所 |
Prisma 的长处不在“它把 SQL 藏得最深”。
而在:
- schema 驱动
- 类型安全
- 关系表达清晰
- migration 纳入主工作流
- 必要时还能退回 raw SQL