Эффективное удаление данных в Prisma: подробное руководство

Удаление данных — важная задача в любом приложении, работающем с базой данных. Prisma, мощный инструмент объектно-реляционного сопоставления (ORM), предоставляет несколько методов для эффективного удаления нескольких записей из базы данных. В этой статье мы рассмотрим различные методы на примерах кода для удаления нескольких записей в Prisma, обеспечивая оптимальную производительность.

Метод 1. Использование метода deleteManyPrisma
Метод deleteManyPrisma позволяет кратко и эффективно удалить несколько записей, соответствующих определенным критериям. Вот пример, демонстрирующий, как использовать deleteMany:

const prisma = require('@prisma/client');
async function deleteRecords() {
  const deletedRecords = await prisma.record.deleteMany({
    where: {
      // Define the conditions to match the records to be deleted
      // Example: Deleting all records where the status is 'inactive'
      status: 'inactive',
    },
  });
  console.log(`Deleted ${deletedRecords.count} records.`);
}
deleteRecords().catch((error) => {
  console.error(error);
});

Метод 2: использование метода queryRawPrisma
В тех случаях, когда вам нужна большая гибкость или вы хотите выполнять необработанные SQL-запросы, вы можете использовать метод queryRawPrisma. Этот метод позволяет вам писать собственные запросы на удаление. Вот пример:

const prisma = require('@prisma/client');
async function deleteRecords() {
  const deletedRecords = await prisma.$queryRaw`
    DELETE FROM record
    WHERE status = 'inactive';
  `;
  console.log(`Deleted ${deletedRecords.affectedRows} records.`);
}
deleteRecords().catch((error) => {
  console.error(error);
});

Метод 3. Пакетное удаление с помощью транзакции Prisma
Если вам необходимо удалить большое количество записей, выполнение пакетного удаления внутри транзакции может значительно повысить производительность. Вот пример:

const prisma = require('@prisma/client');
async function deleteRecords() {
  const batchSize = 1000;
  let totalDeleted = 0;
  const prismaClient = new prisma.PrismaClient();
  while (true) {
    const deletedRecords = await prismaClient.record.deleteMany({
      where: {
        // Define the conditions to match the records to be deleted
        // Example: Deleting all records where the status is 'inactive'
        status: 'inactive',
      },
      take: batchSize,
    });
    if (deletedRecords.count === 0) {
      break;
    }
    totalDeleted += deletedRecords.count;
    if (deletedRecords.count < batchSize) {
      break;
    }
  }
  await prismaClient.$disconnect();
  console.log(`Deleted ${totalDeleted} records.`);
}
deleteRecords().catch((error) => {
  console.error(error);
});

В этой статье мы рассмотрели несколько методов эффективного удаления нескольких записей в Prisma. Мы рассмотрели использование deleteManyдля краткого и простого удаления, queryRawдля выполнения пользовательских запросов SQL и пакетного удаления внутри транзакции для обработки больших наборов данных. Не забудьте выбрать подходящий метод в зависимости от ваших конкретных требований, чтобы обеспечить оптимальную производительность и целостность данных.