Script Valley
Next.js: Full-Stack React Applications
Database Integration with PrismaLesson 4.3

How to perform CRUD operations with Prisma in Next.js

findMany, findUnique, create, update, delete, where, select, include, orderBy, take, skip, upsert

Reading Data

Prisma CRUD operations
import { prisma } from '@/lib/prisma'

// All posts, newest first, with author name
const posts = await prisma.post.findMany({
  where: { published: true },
  include: { author: { select: { name: true } } },
  orderBy: { createdAt: 'desc' },
  take: 10,
  skip: 0,
})

// Single post by ID
const post = await prisma.post.findUnique({
  where: { id: postId },
})

Writing Data

// Create
const newPost = await prisma.post.create({
  data: {
    title: 'Hello World',
    content: 'My first post',
    author: { connect: { id: userId } },
  },
})

// Update
await prisma.post.update({
  where: { id: postId },
  data: { published: true },
})

// Delete
await prisma.post.delete({ where: { id: postId } })

// Upsert (create or update)
await prisma.user.upsert({
  where: { email: 'user@example.com' },
  update: { name: 'Updated Name' },
  create: { email: 'user@example.com', name: 'New User' },
})

Use include to JOIN related records and get them back in the result. Use select to return only specific fields - this reduces data transfer and keeps your types tight. The two cannot be used together at the same level; choose one.

Up next

How to implement pagination with Prisma and Next.js

Sign in to track progress