}

Prisma에서 자주 사용되는 문법과 예시

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()))
email 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" } }), ]);

→ 유저 생성과 게시글 생성을 하나의 트랜잭션으로 처리합니 (두 작업이 모두 성공하거나 모두 실패).