PrismaPostgresAdvanced
$transaction — সব-or-নাতথাক ATOMICITY
একাধিক query-batch বা sequential — অখণ্ডতা।
4টি অংশবাংলা ভাষায়
array (batch)ts
ts
const [order, updatedStock] = await prisma.$transaction([
prisma.order.create({
data: { userId: 7, total: 10200, status: "pending" },
}),
prisma.product.update({
where: { id: 3 },
data: { qty: { decrement: 2 } },
}),
]);interactive — condition সহts
ts
await prisma.$transaction(async (tx) => {
const stock = await tx.product.findUnique({ where: { id: 3 } });
if (!stock || stock.qty < 2) {
throw new Error("stock insufficient");
}
await tx.product.update({
where: { id: 3 },
data: { qty: { decrement: 2 } },
});
});- Batch ($transaction([...])) — এক SQL batch, দ্রুত
- Interactive (async fn) — ভেতরে যেকোনো query, transaction-এ
- Throw হলে সব rollback — কোন আংশিক বদল নয়
concurrency
একই row দুই request-এ বদলালে lost update হয় — qty: { decrement } atomic সুবিধা। গুরুতর হলে row-lock/optimistic-versioning।
শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।