node.js 기반의 object-relational mapping 도구
DB와의 상호작용을 단순화하고 개발 생산성을 높여줌
SQL 쿼리 대신 자바스크립트로 쿼리 작성 및 타입 지정된 쿼리 작성을 통해서 런타임 에러 방지
또한, DB 스키마 변경을 감지하고 자동으로 마이그레이션하여 스키마 관리를 간소화 해줌
Client: Node.js & TS 용 쿼리 작성 클라이언트
Migrate: 마이그레이션 시스템
Studio: 데이터를 보고 편집할 수 있는 GUI 툴
Prisma Client: DB와 상호작용하기 위한 자바스크립트 코드를 자동으로 생성
스키마 정의, DB 마이그레이션(추적 및 적용), DB 관계 정의하도록 쿼리 제공
Model: 특정 테이블이나 컬렉션
Field: 데이터의 속성, 데이터 타입과 제약 조건을 가짐
Relation: 모델 간 연결, 두 테이블 간의 외래 키 관리하고 연관된 데이터 쿼리 가능
// generator 정의
generator client {
provider = 'prisma-client-js'
}
// 터미널에서 prisma/client 패키지 설치 후 생성
yarn add @prisma/client
prisma generate
// 인스턴스화
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
const user = await prisma.user.create({
data: {
email: '',
name: '',
}
})
findMany, findUnique
const users = await prisma.user.findMany({
where: {
age: {
gte: 18
}
},
orderBy: {
name: 'asc'
},
include: {
posts: true
},
select: {
id: true,
name: true
}
})
update, updateMany
const user = await prisma.user.update({
where: {
id: 1
},
data: {
name: 'updated',
}
})
delete, deleteMany
const user = await prisma.user.deleteMany({
where: {
email: {
contains: '@naver.com',
}
}
})
npx prisma migrate dev --name init
마이그레이션 된 파일은 prisma/migration에 생성되고
현재 날짜, 시간 --name 문자의 조합으로 이름이 정해짐
직접 수정하면 안 되고, 항상 명령어를 통해서 파일을 생성하거나 DB 수정해야함