Удаление данных — важная задача в любом приложении, работающем с базой данных. 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 и пакетного удаления внутри транзакции для обработки больших наборов данных. Не забудьте выбрать подходящий метод в зависимости от ваших конкретных требований, чтобы обеспечить оптимальную производительность и целостность данных.