
# 1. Prisma 是什麼?
Prisma 是一套現代化的資料庫工具套件,專為 Node.js 與 TypeScript 應用程式設計。它扮演著程式碼與資料庫之間的橋樑。
與其撰寫原始 SQL:
```sql!
SELECT * FROM users WHERE email = 'test@example.com';
```
你可以改用乾淨、可讀性高的 JavaScript / TypeScript:
```javascript!
const user = await prisma.user.findUnique({
where: { email: 'test@example.com' }
});
```
Prisma 會自動將你的程式碼轉換成對應的 SQL 語句。
它支援 MySQL、PostgreSQL、SQLite、MongoDB 等多種資料庫系統。
# 2. 為什麼選擇 Prisma,而不是其他 ORM?
| 功能 | Prisma | 傳統 ORM |
| ----------- | -------------------- | ------------------- |
| 型別安全 | 自動產生型別 | 手動撰寫型別定義 |
| Schema 管理 | 單一清晰檔案 | 分散在多個 model 中 |
| 自動補全 | 完整 IDE 支援 | 支援有限 |
| Migration | 依據 schema 自動產生 | 手動撰寫 |
| 學習曲線 | 容易上手 | 通常較複雜 |
⸻
主要優勢:
* 自動補全(Auto-completion):IDE 會自動提示資料表名稱、欄位與方法
* 型別安全(Type safety):在執行程式前就能捕捉錯誤
* 單一 Schema 檔案(Single schema file):所有模型集中定義於同一個地方
* 可讀性高(Human-readable):Schema 結構清楚、容易理解
# 3. Prisma 的三大核心工具
## 3-1 Prisma Client — 在程式碼中操作資料庫
```typescript!
// Create(建立)
await prisma.user.create({
data: { name: 'John', email: 'john@email.com' }
});
// Read(讀取)or Query(查詢)
await prisma.user.findMany();
// Update(更新)
await prisma.user.update({
where: { id: 1 },
data: { name: 'Jane' }
});
// Delete(刪除)
await prisma.user.delete({
where: { id: 1 }
});
```
Prisma Client 讓你用直覺、型別安全的方式進行 CRUD 操作(建立、讀取、更新、刪除),而不需要手寫 SQL。
## 3-2 Prisma Migrate — 管理資料庫 Schema 變更
```bash!
npx prisma migrate dev --name add_users_table
```
* 建立資料表
* 新增欄位
* 處理所有 schema 變更
全部由 Prisma 根據你的 schema 自動產生與管理。
## 3-3 Prisma Studio — 視覺化資料庫瀏覽工具
```bash!
npx prisma studio
```
執行後會在 localhost:5555 開啟圖形化介面(GUI),讓你瀏覽與編輯資料。
不需要再使用 phpMyAdmin 等傳統工具。
# 4. Prisma 工作流程總覽
## Step 1:定義 Schema
```prisma!
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}
```
在 schema.prisma 中定義資料模型與欄位結構。
## Step 2:執行 Migration
```bash!
npx prisma migrate dev --name init
```
根據你定義的 schema 建立或更新資料庫結構。
## Step 3:產生 Client
```bash!
npx prisma generate
```
產生型別安全的 Prisma Client,讓你能在程式中操作資料庫。
## Step 4:在程式中使用
```typescript!
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
const users = await prisma.user.findMany({
include: {
posts: true
}
});
const post = await prisma.post.findMany({
where: {
author: {
email: "test@example.com"
}
}
});
```
透過 Prisma Client 進行資料查詢與操作。
# 快速指令參考(Quick Command Reference)
| 工具 | 指令 | 用途 |
| ---- | ---- | ---- |
| Migrate |`npx prisma migrate dev`| 建立 / 更新資料表 |
| Generate |`npx prisma generate`|產生資料庫查詢用的 Client|
|Studio|`npx prisma studio`|視覺化資料瀏覽工具|
|Push|`npx prisma db push`|快速同步資料庫(不產生 migration 檔案)|