Prisma 스키마 예시
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
createdAt DateTime @default(now())
posts Post[]
}
필드명 | 타입 | 설명 | 비고 |
id | Int | 고유 ID | 자동 증가 (@id @default(autoincrement())) |
String | 이메일 | 중복 불가 (@unique) | |
name | String (선택적) | 사용자 이름 | 선택적 필드 |
createdAt | DateTime | 생성된 날짜 및 시간 | 기본값 현재시간 (@default(now())) |
posts | Post[] | 사용자가 작성한 게시글과의 관계 | 1:N 관계 |
📌 1. 데이터 생성 (create)
새로운 데이터를 테이블에 삽입할 때 사용합니다.
await prisma.user.create({ data: { email: "test@gmail.com", name: "홍길동" } });
→ User 테이블에 이메일과 이름 데이터를 추가합니다.
📌 2. 단일 데이터 조회 (findUnique)
고유한 값(예: ID, 이메일 등)으로 단일 데이터를 조회할 때 사용합니다.
const user = await prisma.user.findUnique({ where: { id: 1 } });
→ User 테이블에서 고유 ID가 1인 사용자 조회합니다.
📌 3. 다중 데이터 조회 (findMany)
조건에 맞는 여러 데이터를 가져올 때 사용합니다.
const users = await prisma.user.findMany({ where: { email: { contains: "@gmail.com" } } });
→ User 테이블에서 이메일에 "@gmail.com"을 포함하는 모든 사용자 조회합니다.
📌 4. 데이터 수정 (update)
기존 데이터를 수정할 때 사용합니다.
await prisma.user.update({ where: { id: 1 }, data: { name: "이순신" } });
→ User 테이블에서 ID가 1인 사용자의 이름을 "이순신"으로 변경합니다.
📌 5. 데이터 삭제 (delete)
데이터를 삭제할 때 사용합니다.
await prisma.user.delete({ where: { id: 1 } });
→ Post 테이블에서 ID가 10인 게시글 삭제합니다.
📌 6. 데이터 관계 포함 조회 (include)
관계된 데이터도 함께 조회할 때 사용합니다.
const userWithPosts = await prisma.user.findUnique({ where: { id: 1 }, include: { posts: true } // posts 관계 데이터 포함 });
→ User 테이블에서 ID가 1인 사용자와, 그 사용자가 작성한 모든 게시글까지 함께 조회합니다.
📌 7. 특정 필드만 조회 (select)
특정 필드만 선택하여 조회할 때 사용합니다.
const userEmail = await prisma.user.findUnique({ where: { id: 1 }, select: { email: true } });
→ User 테이블에서 모든 사용자의 이메일과 이름만 조회합니다.
📌 8. 조건부 조회 연산자
Prisma에는 조건부 연산자들 존재하는데, 그 중 AND에 대해서만 보여드리겠습니다.
await prisma.post.findMany({
where: {
AND: [
{ title: { contains: "Prisma" } },
{ authorId: 1 }
]
}
});
→ Post 테이블에서 제목에 "Prisma"가 포함되고 작성자 ID가 1인 게시글 조회합니다.
📌 9. 데이터 개수 세기 (count)
조건에 맞는 데이터 개수를 셀 때 사용합니다.
const userCount = await prisma.user.count({ where: { email: { contains: "@gmail.com" } } });
→ 이메일에 "@gmail.com"을 포함한 사용자 수를 셉니다.
📌 10. 데이터베이스 트랜잭션 처리 ($transaction)
여러 작업을 하나의 트랜잭션으로 묶을 때 사용합니다.
await prisma.$transaction([ prisma.user.create({ data: { email: "test1@gmail.com" } }), prisma.user.create({ data: { email: "test2@gmail.com" } }), ]);
→ 유저 생성과 게시글 생성을 하나의 트랜잭션으로 처리합니 (두 작업이 모두 성공하거나 모두 실패).